Igo*_*hin 120 java spring dependency-injection
假设我们有一个班级:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Run Code Online (Sandbox Code Playgroud)
然后我们创建了这个类的对象(或者其他一些框架创建了这个类的实例).
MyClass obj = new MyClass();
Run Code Online (Sandbox Code Playgroud)
是否仍然可以注入依赖项?就像是:
applicationContext.injectDependencies(obj);
Run Code Online (Sandbox Code Playgroud)
(我认为Google Guice有这样的东西)
ska*_*man 179
您可以使用autowireBean()
方法执行此操作AutowireCapableBeanFactory
.你将它传递给一个任意对象,Spring将它视为它自己创建的东西,并将应用各种自动装配的零碎.
为了掌握AutowireCapableBeanFactory
,只需通过自动装配:
private @Autowired AutowireCapableBeanFactory beanFactory;
public void doStuff() {
MyBean obj = new MyBean();
beanFactory.autowireBean(obj);
// obj will now have its dependencies autowired.
}
Run Code Online (Sandbox Code Playgroud)
gla*_*666 18
您还可以使用@Configurable注释标记MyClass:
@Configurable
public class MyClass {
@Autowired private AnotherClass instance
}
Run Code Online (Sandbox Code Playgroud)
然后在创建时它将自动注入其依赖项.您还应该<context:spring-configured/>
在您的应用程序上下文中使用xml.
刚刚得到了同样的需求,在我的情况下,它已经是非 Spring 可管理的 Java 类中的逻辑,它可以访问ApplicationContext
. 灵感来自 scaffman。解决者:
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean(manuallyCreatedInstance);
Run Code Online (Sandbox Code Playgroud)
我使用了不同的方法。我有弹簧加载的 bean,我想从创建自己线程的第三方库的扩展类中调用它们。
在非托管类中:
{
[...]
SomeBean bc = (SomeBean) SpringContext.getBean(SomeBean.class);
[...]
bc.someMethod(...)
}
Run Code Online (Sandbox Code Playgroud)
然后作为主应用程序中的辅助类:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContext implements ApplicationContextAware
{
private static ApplicationContext context;
public static <T extends Object> T getBean(Class<T> beanClass)
{
return context.getBean(beanClass);
}
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException
{
SpringContext.context = context;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65225 次 |
最近记录: |