2011-03-23 118 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