@Autowired支持标注在构造器/参数/方法/属性上
测试类
- Boss被注入类
- Assistant 注入类
@Component
public class Boss {
private Assistant assistant;
public Assistant getAssistant() {
return assistant;
}
public void setAssistant(Assistant assistant) {
this.assistant = assistant;
}
}
@Component
public class Assistant {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
第一种 属性注入
@Autowired
private Assistant assistant;
第二种 方法注入
- 注入的时候根据方法的形参Assistant assistant到容器中拿相应的对象, 执行这个方法
@Autowired
public void setAssistant(Assistant assistant) {
this.assistant = assistant;
}
第三种 构造器注入
在容器启动时, 容器调用拿对象注入,
@Autowired
public Boss(Assistant assistant) {
this.assistant = assistant;
}
如果只有一个参数, @Autowired可以省略
public Boss(Assistant assistant) {
this.assistant = assistant;
}
第四种 参数注入
- 和构造器注入一个意思
public Boss(@Autowired Assistant assistant) {
this.assistant = assistant;
}
注入bean
前面提到的需要注入的位置: 比如Boss, Assistant都是通过@Component放到ioc容器的bean 如果通过@Bean注解呢? 也一样可以自动注入
@Bean
public Color color(Assistant assistant) { //同样只有一个参数, 不用写@Autowired, 自动注入了
Color color = new Color();
color.setAssistant(assistant)
return color;
}