2011-03-23 68 views
0

我有什么已知的方式来基于某些条件在春季IoC容器中注入bean。例如。我有两个豆子:春季IoC容器中的条件

<bean id="aaa" class="My"/> 
<bean id="bbb" class="My"/> 

...并希望根据以下规则在另外一个bean注入它:

注入“AAA”如果“AAA”不为空或注入“BBB”另一种情况

感谢

+0

我已经使用FactoryBean来解决这个问题。 – Raman 2011-03-31 15:32:12

回答

3

您可以使用JavaConfig - 那里,你可以使用Java代码来实现这个逻辑。我从来没有使用过它,但服用从文档的例子:

@Configuration 
public class ServiceConfig { 
    private @Resource(name="aaa") Aaa aaa; 
    private @Resource(name="bbb") Aaa bbb; 

    public @Bean TransferService transferService() { 
     TransferService service = new TransferServiceImpl(); 
     if (aaa != null) { 
      service.setProperty(aaa); 
     } else { 
      service.setProperty(bbb); 
     } 
     return service; 
    } 
} 

另一种选择是使用FactoryBean来封装逻辑 - 工厂bean可以查找在上下文中的豆,如果找到了 - 回报它。如果找不到 - 查找另一个bean。

+0

...然后在XML中声明'ServiceConfig'本身就是一个bean。 – skaffman 2011-03-23 16:21:58