java – Spring @Autowired在一个类新实例上
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring @Autowired在一个类新实例上,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1705字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring @Autowired在一个类新实例上](/upload/InfoBanner/zyjiaocheng/704/03029763e25e4a35802afec956c2073f.jpg)
我对Spring不太熟悉,我有以下情况:
存储库类:
@Repository
public class MyRepository {
// ...
}
使用存储库类的类:
public class MyClass extends AbstractClass {
@Autowired
private MyRepository myRepository;
//...
}
我知道如果我使用@Component注释我的MyClass并将其与@Autowired一起使用,那么@Autowired MyRepository就可以解决了.
问题是我需要使用反射创建MyClass的新实例.所以MyRepository永远不会被解析,并且一直都是null.
在这种情况下有没有办法使用@Autowired?
更好地解释我的情况:
我有一些AbstractClass的实现.
在我的应用程序的设置阶段,我创建了这些实现的HashMap.基本上:
{"MyClass", MyClass.class}
//...
然后我有一个通用的Controller映射到url / {class}?options = …
使用{class} @PathVariable,上面的HashMap和反射我能够根据给定的选项创建一个类的实例(这部分很重要).你们认为有更好的方法吗?
提前致谢
解决方法:
Spring本身提供了一些在对象中进行自动布线的功能
你用new或newInstance()或其他东西创建的.
要使用它,你需要一个AutowireCapableBeanFactory
你可以通过Spring与@Autowired的正常依赖注入获得.
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
然后使用其autowireBean(Object)方法
将@Autowired属性注入到bean中.
Object myBean = map.get(className).newInstance();
autowireCapableBeanFactory.autowireBean(myBean);
设计说明:
如果你真的需要上面的方法,请好好想想.
AutowireCapableBeanFactory的javadoc建议不要在大多数用例中使用此接口:
This subinterface of BeanFactory is not meant to be used in normal application code: stick to
BeanFactory
orListableBeanFactory
for typical use cases.Integration code for other frameworks can leverage this interface to wire and populate existing bean instances that Spring does not control the lifecycle of. This is particularly useful for WebWork Actions and Tapestry Page objects, for example.
内容总结
以上是互联网集市为您收集整理的java – Spring @Autowired在一个类新实例上全部内容,希望文章能够帮你解决java – Spring @Autowired在一个类新实例上所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。