Study(4) SpringIOC 基于注解的依赖注入

1.依赖注入相关注解

(1).@Autowired 和 @Qualifier

a. 支持set方式注入和构造器方式注入

b. 当采用set方式注入时,可以将@Autowired添加到set方法前面,
    (1).不使用@Qualifier,则容器会使用byType方式来注入,【autowire = byType】,
        按照类型为Waiter查找spring 容器,有可能出错(当存在多个类型的bean)
    (2).使用@Qualifier注解,明确指定要注入bean的id,【autowire = byName】

c.当采用构造器注入时,可以将该注解添加到对应的构造器前面

示例A:set方式注入:

方式一:
    private Waiter waiter;
    @Autowired
    public void setWaiter(@Qualifier("waiter") Waiter waiter) {
        System.out.println("setWaiter()");
        this.waiter = waiter;
    }

方式二:
    @Autowired
    @Qualifier("waiter")
    private Waiter waiter;

方式一和方式二区别:
        方式一,赋值和输出语句;方式二,只赋值。

示例B:构造器方式注入:

方式一:
    private Waiter waiter;

    @Autowired
    public School(@Qualifier("waiter") Waiter waiter){
        System.out.println("School(waiter)");
        this.waiter = waiter;
    }

方式二:
    @Autowired
    @Qualifier("waiter")
    private Waiter waiter;

    public School( Waiter waiter){
        System.out.println("School(waiter)");
        this.waiter = waiter;
    }    

(2).@Resource(重点)

a.只支持set方式的注入

b.将该注解添加到set方法前或者属性前,使用name属性指定要注入的bean的id,@Resource(name = "waiter")

c.默认会按照byType方式注入@Resource(type = Waiter.class)

示例

方式一:
    private Waiter waiter;

    @Resource(name = "waiter")
    public void setWaiter(Waiter waiter) {
        System.out.println("bar(waiter)");
        this.waiter = waiter;
    }

方式二:
    @Resource(name = "waiter")
    private Waiter waiter;

    public void setWaiter(Waiter waiter) {
        System.out.println("bar(waiter)");
        this.waiter = waiter;
    }

2.@Value注解

(1).可以使用该注解来注入基本类型的值

@Value("悟空")
private String name;

(2).可以使用该注解使用spring表达式

第一步:config.properties
pagesize=10

第二步:配置
     <context:component-scan base-package="cn.com.sinodata.annotation.zj"/>

    <util:properties id="config" location="classpath:config.properties"></util:properties>

第三步:
    @Component
    public class Manage {
        @Value("#{config.pagesize}")
        private String pageSize;
    }

第四步:测试
     ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotation.xml");
    Manage manage = applicationContext.getBean("manage", Manage.class);
    System.out.println(manage.toString());

(3).该注解可以添加在属性前,或者添加到对应的set方法前

方式一:
    @Value("#{config.pagesize}")
    private String pageSize;

方式二:
    private String pageSize;

    @Value("#{config.pagesize}")
    public void setPageSize(String pageSize) {
        this.pageSize = pageSize;
    }

文章标题:Study(4) SpringIOC 基于注解的依赖注入

发布时间:2020-04-23, 17:43:34

最后更新:2020-04-23, 17:43:35