Spring----注解简化配置

用注解的方式来简化配置

组件扫描@Component("bean的id,默认缺省值为类名首字母小写")

什么时组件扫描?

如何使用组件扫描

step1:在类前面添加相应的注解

Student.java
@Component("stu1")
public class Student {
    public Student() {
        System.out.println("Student类的空参构造----注解方式");
    }
}

step2:在配置文件中进行配置组件扫描

annotation.xml
<!-- 配置组件扫描
    Component组件扫描:
            Spring启动容器之后,会扫描base-package指定的包及其子包下面的所有的类,如果这些类前面添加了特定的注解,
            比如添加了@Component,则容器会将该类实例化(即纳入容器进行管理)
 -->
<context:component-scan base-package="cn.huang.annotation"/>


@Test
public void test1(){
    ApplicationContext ac = new ClassPathXmlApplicationContext("annotation.xml");
    //bean的id在Student.java中通过@Component("stu1")配置,默认缺省值为类名首字母小写
    Student student = ac.getBean("stu1", Student.class);
    System.out.println(student);
}
  • 常用注解:
    • @Component 通用注解
    • @Service 用于业务层
    • @Repository 用于持久层(数据访问层)
    • @Controller 用于控制层

使用注解指定作用域

@Scope("singleton/prototype"),默认缺省值为singleton

@Component("stu1")
@Scope("prototype")
public class Student {
    public Student() {
        System.out.println("Student类的空参构造----注解方式");
    }
}

使用注解指定生命周期----借用javaee的注解,需要导包

  • @PostConstruct

  • @PreDestroy

  • 必须指定作用域为singleton

    @Component("stu1") @Scope("singleton"
    public class Student {
        public Student() {
            System.out.println("Student类的空参构造----注解方式");
        }
    
        @PostConstruct
        public void init(){
            System.out.println("Student的init()初始化方法");
        }
    
        @PreDestroy
        public void destroy(){
            System.out.println("Student的destroy()销毁方法");
        }
    }

     

使用注解指定延迟加载

  • @Lazy(true)

使用注解依赖注入

@Aotuwired和@Qualifier

  • 1)set方法注入

    @Component("wt")
    public class Waiter {
        public Waiter(){
            System.out.println("Waiter的无参构造器");
        }
    }
    
    @Component("rest")
    public class Restaurant {
        private Waiter wt;
        /**
         * 如果只使用Aotowired一个属性,则依据byType来查找对象,
         * 再加Qualifier,则按照byName(wt---寻找bean的id=wt)的方式来找,
         * @param wt
         */
        @Autowired
        public void setWt(@Qualifier("wt") Waiter wt) {
            System.out.println("Restaurant的setWt()方法");
            this.wt = wt;
        }
        public Restaurant(){
            System.out.println("Restaurant的无参构造器");
        }
        @Override
        public String toString() {
            return "Restaurant [wt=" + wt + "]";
        }
    }
    
    • AutoWired(set方法前)和Qualifier(参数前)结合使用,不然只使用AutoWired按找byType来查找可能会找到多个bean,使用Qualifier("注入bean的id")

    • 或者直接再属性前面使用两个注解,省略set方法

      @Autowired
      @Qualifier("wt")
      private Waiter wt;
      

      加在属性前,只是单纯的赋值

  • 2)构造方法注入

    @Autowired
    public Leader(@Qualifier("wt") Waiter wt) {
        System.out.println("Leader的带参构造器");
        this.wt = wt;
    }
    
  • Autowired和Qualifier总结:

    • 这两个注解支持set方法和构造器方法注入
    • 在使用set方法注入时,Autowired可加到set或者属性前,Qualifier用来指定被注入的bean的id,如果不适用Qualifier,则按照byType方式来查找相同对应的bean进行注入
    • 在构造器注入时,这两个注解要家到构造器前面
  • 3)@Resource(重点----实际开发中应用的较多)

    @Component("eg")
    public class Enginee {
        public Enginee() {
            System.out.println("Enginee的无参构造器");
        }
    }
    
    @Component("car")
    public class Car {
        private Enginee eg;
        //不加name时,byName-->byType,指定name之后,寻找该name对应的id的bean
        @Resource(name="eg")
        public void setEg(Enginee eg) {
            System.out.println("Car的setEg()方法");
            this.eg = eg;
        }
        public Car() {
            System.out.println("Car的无参构造器");
        }
        @Override
        public String toString() {
            return "Car [eg=" + eg + "]";
        }
    }
    ---------------------------------------------------------------
    该注解也可以直接加在属性前面,做简单的赋值
    

  • 4)@Inject/@Name(基本不用) 来源于javaee,

注入基本类型的值Value

  • 注入基本数据类型,在属性的set方法上加@Value("值"),注入基本类型

    @Value("黄志宏")
    public void setName(String name) {
        this.name = name;
    }
    
    @Value("23")
    public void setAge(int age) {
        this.age = age;
    }
    
    -------------------------或者直接将注解加到属性前--------------------------
    @Value("花花")
    private String name;
    @Value("23")
    private int age;
    
  • 注入Spring表达式

    @Value("#{config.pagesize}")
    private int pageSize;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值