构造函数中的Spring不需要的属性?

时间:2016-01-20 06:09:27

标签: java spring

我想通过构造函数注入将bean列表注入spring bean。

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

但BeanToInject的实现在其他模块中。这些模块可能已关闭。如果applicationcontext中没有BeanToInject的实现,则spring会在启动时抛出异常而不是注入空列表。我能做什么? (基于Setter和私有财产的自动装配对我来说不是一种选择。)

2 个答案:

答案 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);