自动装配工厂bean

时间:2013-03-03 06:39:34

标签: spring

我有两个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!

如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

使用@Awtowired注释。要使用@Inject注释,必须在claspath上有一个支持它的特殊jar。你也必须拥有 xml中的<context:annotation-config/>元素可启用awtowiring。此外,您应该为这3个bean(myBean,myBeanA,myBeanB)按名称启用自动装配。