36

如果我有@Autowired List<SomeBeanClass> beans;并且没有豆子SomeBeanClass,我会得到:

没有为依赖项 [SomeBeanClass 的集合] 找到类型为 [SomeBeanClass] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

如果我添加(required=false),我null得到beans。但它看起来像需要空检查的容易出错的解决方案。

如果没有豆子存在,是否有一种简单的方法(一个衬垫)来自动连接空集合?

4

2 回答 2

44

Spring 4 和 Java 8 有几个选项:

@Autowired(required=false)
private List<Foo> providers = new ArrayList<>();

您还可以java.util.Optional与构造函数一起使用:

@Autowired
public MyClass(Optional<List<Foo>> opFoo) {
    this.foo = opFoo.orElseGet(ArrayList::new);
}

您还应该能够使用 自动装配 a 字段Optional<List<Foo>> opFoo;,但我还没有使用过。

于 2015-07-09T20:35:51.147 回答
23

如果我添加(required=false),我null得到beans

该字段是否被明确设置为 null 还是根本没有设置?尝试添加初始化表达式

@Autowired(required=false) List<SomeBeanClass> beans = new ArrayList<>();
于 2013-10-10T14:54:23.113 回答