Spring Bean依赖注入:含无参构造的ClassA配置有效性及注入疑问
问题解答
1. 当前配置能否实现正确注入?
可以实现。只要variable类型的Bean已经在Spring容器中完成注册(不管是通过配置文件、注解还是其他方式加载),Spring会优先使用带有@Autowired注解的构造函数来创建ClassA的Bean实例,并将对应的variable Bean注入进去。注意:你的伪代码里类名是classA但无参构造写的A(),这是笔误,实际代码中构造函数名必须和类名一致(比如ClassA()),否则会编译失败。
2. 同时存在无参和带参构造时的注入逻辑
当Spring容器初始化ClassA的Bean时:
- 只要有构造函数标注了
@Autowired,Spring就会优先选择这个构造函数来实例化对象,同时自动注入构造函数参数对应的Spring Bean。 - 如果没有任何构造函数标注
@Autowired,Spring才会默认使用无参构造函数(如果存在)创建实例,之后再通过字段注入或setter注入的方式填充依赖。
3. 手动用无参构造创建实例的情况
如果是你自己通过new ClassA()手动创建实例,而非由Spring容器管理这个对象,那么Spring不会对该实例执行任何依赖注入操作。也就是说,这个手动创建的ClassA对象中的a会是null——Spring只负责管控自己容器内Bean的依赖注入,手动new出来的对象不在其管理范围内。
内容的提问来源于stack exchange,提问作者spicymaggisauce101
相关产品推荐
相关产品推荐

