[英]Wiring a spring managed bean from a class which is not managed by spring
是否可以将Spring Managed Bean连接到不受Spring IoC管理的类中? 假设有两个类ClassA
(不受spring管理)和ClassB
(受Spring管理),是否有可能在ClassA
ClassB
。
这是我最近遇到的一个问题,我不知道该怎么做?
对的,这是可能的。 您将需要一个ApplicationContextAware
实现,以使用ApplicationContext
获取Spring Managed Bean实例。 这是一个古老的Spring Framework技巧。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public final class BeanUtil implements ApplicationContextAware {
private static ApplicationContext CONTEXT;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
CONTEXT = applicationContext;
}
public static <T> T getBean(Class<T> beanClass) {
return CONTEXT.getBean(beanClass);
}
}
然后,必须在ClassA中使用BeanUtil::getBean
静态方法在ApplicationContext
获取ClassB实例。
public class ClassA {
private ClassB classB;
@Override
public String toString() {
return "ClassA - " + getClassB().toString();
}
// Lazy initialization of ClassB to avoid NullPointerException
private ClassB getClassB() {
if (classB == null) {
classB = BeanUtil.getBean(ClassB.class);
}
return classB;
}
}
如果Spring不管理Bean,请不用担心“接线”。 相反,只需解决“如何将对托管Bean的引用转换为非托管Bean”的问题。
在您的示例中,由于ClassA
不是由Spring管理的,因此您必须在某个地方创建它。 传递一个参考ClassB
到ClassA
当您创建的实例ClassA
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.