Spring注解(九) @Autowired

151 阅读1分钟

@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;
}