![](/img/trans.png)
[英]How do I inject spring beans into non-managed beans in a Spring boot console application?
[英]Inject spring beans into a non-managed class
我有这个非托管 class,我想注入 spring bean(我不知道它们是什么)。 我怎样才能做到这一点?
例如,假设我有以下 class:
public class NonManagedClass extends APIClass {
@Resource
private Service1 service;
@Resource
private Service2 service2;
// here i can declare many different dependencies
@Resource
private ServiceN serviceN;
@Override
public void executeBusinessStuffs() {
// business logics
}
}
我需要以某种方式让 spring 在我的 class 中注入这些依赖项。创建后我可以访问这些对象,因此我很容易调用可以实现此功能的任何方法。 例如:
@Service
public void SomeAPIService {
@Resource
private BeanInjector beanInjector; // I'm looking for some funcionality of spring like this
public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
APIClass instance = clazz.getConstructor().newInstance();
beanInjector.injectBeans(instance);
instance.executeBusinessStuffs();
}
}
Spring 是否具有基于字段注释为非托管 class 注入 bean 的功能?
用ApplicationContext
替换BeanInjector
就差不多了。 从那里你可以获得AutowireCapableBeanFactory
,它提供了一些方便的方法,如createBean
和autowireBean
。
@Service
public void SomeAPIService {
@Resource
private ApplicationContext ctx;
public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
APIClass instance = ctx.createBean(clazz);
instance.executeBusinessStuffs();
}
}
或者如果你真的喜欢自己构建东西而不是使用容器:
@Service
public void SomeAPIService {
@Resource
private ApplicationContext ctx;
public void someProcessingFunction(Class<? extends APIClass> clazz) throws Exception {
APIClass instance = clazz.getConstructor().newInstance();
ctx.getAutowireCapableBeanFactory().autowireBean(instance);
instance.executeBusinessStuffs();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.