我想通过构造函数注入将bean列表注入spring bean。
@Component
public void MyBean {
@Autowired
public MyBean(List<BeanToInject> beanList) {
...
}
}
但BeanToInject的实现在其他模块中。这些模块可能已关闭。如果applicationcontext中没有BeanToInject的实现,则spring会在启动时抛出异常而不是注入空列表。我能做什么? (基于Setter和私有财产的自动装配对我来说不是一种选择。)
答案 0 :(得分:1)
如果使用Java 8,则可以使用Optional:
@Autowired
public TestComponent(Optional<List<BeanToInject>> beanList) {
if (beanList.isPresent()) {
// There are beans in the list
} else {
// No beans injected
}
}
答案 1 :(得分:1)
在Spring中,Autowired可以具有所需的值来定义它在autowire时是否需要。但这不适用于构造函数。在您的情况下,最好的解决方案是在方法或属性中使用自动装配并应用
@Autowired(required=false)
private List<BeanToInject> beanList;
或者
@Autowired(required=false)
public void setBeanList(List<BeanToInject> beanList);