【问题标题】:Spring nonrequired properties in constructor?构造函数中的Spring非必需属性?
【发布时间】:2016-01-20 06:09:27
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过@Autowired(required = false)吗?
  • 我很好奇并对其进行了测试,但它在构造函数上不起作用(至少在我的小型测试项目中不起作用)

标签: java spring


【解决方案1】:

在 Spring 中,Autowired 可以有一个 required 值来定义它在 autowire 时是否需要。但这不适用于构造函数。在您的情况下,最好的解决方案是在方法或属性中使用自动装配并应用
@Autowired(required=false) private List<BeanToInject> beanList;

@Autowired(required=false) public void setBeanList(List<BeanToInject> beanList);

【讨论】:

    【解决方案2】:

    如果你使用 Java 8,你可以使用 Optional:

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

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多