[英]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.