如何注入依赖到一个自我实例化的对象在spring?
假设我们有一堂课:
public class MyClass { @Autowired private AnotherBean anotherBean; }
然后我们创build了这个类的一个对象(或者其他一些框架已经创build了这个类的实例)。
MyClass obj = new MyClass();
是否有可能仍然注入依赖关系? 就像是:
applicationContext.injectDependencies(obj);
(我认为谷歌Guice有这样的东西)
您可以使用AutowireCapableBeanFactory
的autowireBean()
方法执行此操作。 你把它传递给一个任意的对象,Spring会把它当作自己创build的东西来处理,并且会应用各种自动assembly的东西。
要获得AutowireCapableBeanFactory
,只需自动装入:
private @Autowired AutowireCapableBeanFactory beanFactory; public void doStuff() { MyBean obj = new MyBean(); beanFactory.autowireBean(obj); // obj will now have its dependencies autowired. }
你也可以使用@Configurable标注来标记你的MyClass:
@Configurable public class MyClass { @Autowired private AnotherClass instance }
然后在创build时它会自动注入它的依赖关系。 你也应该在你的应用上下文中使用<context:spring-configured/>
xml。
不是没有一些解决方法,因为Spring对这个实例一无所知。
真正的问题是:你为什么要创build一个类的实例,你想手动注入依赖项,而不是让Spring控制它呢? 为什么不使用MyClass
类注入MyClass
?