问题
假设我们有一个班级:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
然后我们创建了这个类的对象(或者其他一些框架创建了这个类的实例)。
MyClass obj = new MyClass();
是否仍然可以注入依赖项?就像是:
applicationContext.injectDependencies(obj);
(我认为Google Guice有这样的东西)
#1 热门回答(153 赞)
你可以使用172449291的autowireBean()
方法执行此操作。你将它传递给一个任意对象,Spring将它视为它自己创建的东西,并将应用各种自动装配的零碎。
要掌握AutowireCapableBeanFactory
,只需自动装配:
private @Autowired AutowireCapableBeanFactory beanFactory;
public void doStuff() {
MyBean obj = new MyBean();
beanFactory.autowireBean(obj);
// obj will now have its dependencies autowired.
}
#2 热门回答(18 赞)
你还可以使用@Configurable注释标记MyClass:
@Configurable
public class MyClass {
@Autowired private AnotherClass instance
}
然后在创建时它将自动注入其依赖项。你还应该在应用程序上下文xml中包含<context:spring-configured/>
。
#3 热门回答(2 赞)
刚刚得到了相同的需求,在我的情况下,它已经是非Spring可管理的java类中的逻辑,它可以访问ApplicationContext
。灵感来自脚手架。解决方法:
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean(manuallyCreatedInstance);