spring常用注解及源码解析(四)

自动注入相关

1、相关注解以及之间的差异

  1. @Autowired、@Qualifier、@Primary是Spring框架的
    @Resource、@Inject是java本身的

2)@Autowired

1)按照类型去容器中找,如果是ioc容器中有多个,再将属性的名称作为组件的id去容器中查找
2)@Autowired(required = false),作为非必须的装配
3)@Autowired:构造器、参数、方法、属性

@Component
public class Boss {
    @Override
    public String toString() {
        return "Boss{" +
                "car=" + car +
                '}';
    }
    //@Autowired标注在构造器上时,Spring创建容器时,就会调用方法,完成赋值
    //方法使用的参数,自定义类型的值从IOC容器中获取
    @Autowired
    public Boss(Car car) {
        this.car = car;
        System.out.println("有参构造器:"+car);
    }

    public Car getCar() {
        return car;
    }
    //@Autowired标注在方法上时,Spring创建容器时,就会调用方法,完成赋值
    //方法使用的参数,自定义类型的值从IOC容器中获取
   // @Autowired
    public void setCar(Car car) {
        this.car = car;
    }

    private Car car;

}

3)@Qualifier("bookDo2")
该注解可以指定一个具体的bean实例id

3)@Primary
首选装配的组件

@Configuration
@ComponentScan({"com.dwd.snail.testspring.test.bean","com.dwd.snail.testspring.test.service","com.dwd.snail.testspring.test.dao","com.dwd.snail.testspring.test.controller"})
public class MainConfig_Autowire {
    @Primary
    @Bean(value="bookDo2")
    public BookDo bookDo(){
        BookDo bookDo=new BookDo();

        bookDo.setLabel("2");
        return bookDo;

    }


}

4)@Resource
可以和@Autowired一样实现自动装配功能,但是默认按照组件名称作为组件进行装配,没有能支持@Autowired(required = false)

5)@Inject
需要导入javax.inject的包,和@Autowired的功能一样,但是没有required = false的属性

你可能感兴趣的:(spring常用注解及源码解析(四))