Подтвердить что ты не робот

Есть ли простой способ 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?

4b9b3361

Ответ 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;, но я еще не использовал его.