Spring Boot未用@Autowired仍实现对象注入的原因咨询
为什么SpringBoot中构造方法未加@Autowired仍能注入依赖?
这其实是Spring框架从4.3版本开始引入的便捷特性,目的是减少冗余注解,让代码更简洁清爽。
具体来说,只要满足以下两个条件,Spring就会自动帮你完成构造方法的依赖注入,完全不需要额外添加@Autowired:
- 你的类只有一个构造方法(无论这个构造方法是否带参数)
- 这个类是Spring容器管理的Bean(比如标注了
@Controller、@Service、@Component这类 stereotype 注解,或是通过其他方式注册到容器中)
回到你的代码示例:
public class Test { private Test1 test1; public Test(Test1 test1) { this.test1 = test1; } }
只要Test类本身被Spring管理(比如你给它加了@RestController或者@Component),并且Test1也是Spring容器中的Bean,Spring就会自动识别这个唯一的构造方法,把Test1实例注入进去。
当然也有例外情况:如果你的类存在多个构造方法,Spring就无法自动判断该使用哪一个来注入依赖,这时候你就必须给目标构造方法加上@Autowired注解,明确告诉Spring选择哪一个。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

