Есть ли простой способ autowire пустой коллекции, если beans присутствует в Spring?
Если у меня есть @Autowired List<SomeBeanClass> beans;
и beans SomeBeanClass
, я получаю:
Нет соответствующего bean типа [SomeBeanClass], найденного для зависимости [коллекция SomeBeanClass]: ожидается как минимум 1 bean, который квалифицируется как кандидат autwire для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Autowired(required = true)}
Если я добавлю (required=false)
, я получаю null
для beans
. Но похоже, что решение, подверженное ошибкам, требует нулевых проверок.
Есть ли простой способ (один лайнер) для автоматической сборки пустой коллекции, если нет beans?
Ответы
Ответ 1
Если я добавлю (required=false)
, я получаю null
для beans
.
Является ли поле явно установленным в null или просто не устанавливается вообще? Попробуйте добавить выражение инициализатора
@Autowired List<SomeBeanClass> beans = new ArrayList<>();
Ответ 2
Есть несколько вариантов с 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);
}
Вы также должны иметь возможность autowire поле с Optional<List<Foo>> opFoo;
, но я еще не использовал его.