我有两个bean“myBeanA”和“myBeanB”。根据一些旗帜,我必须在启动时返回其中一个。
我决定用工厂实现这个
<bean id="myBeanFactory" class="MyBeanFactory"/>
<bean id="myBeanA" class="MyClassImplA"/>
<bean id="myBeanB" class="MyClassImplB"/>
<bean id="myBean" class="MyInterface" bean-factory="myBeanFactory" bean-method="getMyBean"/>
现在工厂应该做这样的事情
public MyInterface getMyBean(){
if ( flag ) {
return (MyInterface) context.getBean("myBeanA");
}else{
return (MyInterface) context.getBean("myBeanB");
}
}
这很好..但是当我尝试将“myBeanB”和“myBeanA”注入myBeanFactory时,我得到了空值。
@Inject // assume setters included..
private MyInterface myBeanA;
@Inject // assume setters included...
private MyInterface myBeanB;
public MyInterface getMyBean(){
return flag ? myBeanA : myBeanB;
}
出于某种原因,在这种情况下 - myBeanA和myBeanB都是null!
如何让它发挥作用?
答案 0 :(得分:0)
使用@Awtowired
注释。要使用@Inject
注释,必须在claspath上有一个支持它的特殊jar。你也必须拥有
xml中的<context:annotation-config/>
元素可启用awtowiring。此外,您应该为这3个bean(myBean,myBeanA,myBeanB)按名称启用自动装配。