自动注入相关
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的属性