java – Spring在手动类实例化期间注入@Autowired字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring在手动类实例化期间注入@Autowired字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1570字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring在手动类实例化期间注入@Autowired字段](/upload/InfoBanner/zyjiaocheng/812/440108a6287843a59424ceae97ef64b4.jpg)
在我的项目中,我很惊讶地看到Spring(4.3)似乎试图为类自动化依赖,即使它们是手动实例化的.
MyClass.java(注意Lombok注释):
@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
@Autowired
private MyClassDependency dependency;
}
MyClassDependency.java使用工厂方法而没有Spring注释:
public class MyClassDependency {
public static MyClassDependency create() { return new MyClassDependency(); }
}
Spring配置导致NoSuchBeanDefinitionException:
@Configuration
public class SpringConfig {
@Bean
public MyClass myClass() {
return new MyClass(MyClassDependency.create());
}
}
提供bean让Spring感到高兴:
@Configuration
public class SpringConfig {
@Bean
public MyClass myClass() {
return new MyClass(); // let autowire inject dependencies
}
@Bean
public MyClassDependency myClassDependency() {
return MyClassDependency.create();
}
}
这对我来说是个大惊喜.我想拥有更简单的配置的第一个版本……这种行为来自/控制在哪里? (我可能错过了它或从某些依赖项中删除它).
PS:为了澄清,MyClass代码不受我的控制,但我可以更改Spring配置.我想了解Spring如何使用bean方法拦截构造函数调用以及是否可以使用构造函数.
解决方法:
问题如下:
>您使用@Autowired注释了一个字段 – 告诉Spring,有一个需要在那里注入的依赖项
>您使用@Bean注释了一个方法 – 它将返回值放入Spring的上下文中.
>当Spring处理@ Bean注释对象的返回值时,它开始处理其注释 – 并且有一个带注释的字段,告诉Spring在那里注入依赖项,即使该字段已经分配了值.
> Spring尝试在此处注入依赖项,但Spring依赖项中不存在该依赖项,因此注入失败.
因此拥有@Bean,但手动注入@Autowired依赖项会相互冲突,您现在可以理解,为什么 – 您不应该手动注入Autowired bean! Autowired是一个注释,告诉他CI容器做一些注射工作.
内容总结
以上是互联网集市为您收集整理的java – Spring在手动类实例化期间注入@Autowired字段全部内容,希望文章能够帮你解决java – Spring在手动类实例化期间注入@Autowired字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。