2016-01-20 61 views
2

我想通過構造函數注入將bean列表注入Spring bean。構造函數中的不需要的屬性?

@Component 
public void MyBean { 
    @Autowired 
    public MyBean(List<BeanToInject> beanList) { 
     ... 
    } 
} 

但是BeanToInject的實現在其他模塊中。這些模塊可能被關閉。如果應用程序上下文中沒有實現BeanToInject,則Spring將在啓動時引發異常,而不是注入空列表。我能做什麼? (setter和私有財產以自動連接是不是我的選擇。)

+0

你試過'@Autowired(所需= FALSE)'? –

+0

我很好奇,並且測試了它,它不能在構造函數上工作(至少不是在我的小測試項目中) – dunni

回答

1

在Spring中,自動裝配Autowired可以有需要的值來定義它自動裝配時需要或不需要。但是這不適用於構造函數。在你的情況,最好的解決辦法是採用的方法或屬性自動裝配和應用
@Autowired(required=false) private List<BeanToInject> beanList;
或者
@Autowired(required=false) public void setBeanList(List<BeanToInject> beanList);

0

如果使用Java 8中,您可以使用可選:

@Autowired 
public TestComponent(Optional<List<BeanToInject>> beanList) { 
    if (beanList.isPresent()) { 
     // There are beans in the list 
    } else { 
     // No beans injected 
    } 
} 
相關問題