Как определить List бин в Spring и инжект его в классы
Быстрый ответ
@Bean
public List<String> myList() {
    return Arrays.asList("яблоко", "банан", "вишня");
}
Всё просто и очевидно: метод с аннотацией @Bean создаёт список с фиксированным набором строк в Spring-конфигурации.

JavaConfig, Автопроводка и Порядок
Управление вашими бинами
Допустим, у вас есть сложный Spring-проект, в котором сервисы A и B разбросаны по разным углам. Вам помогут два инструмента:
- Autowired: Он отслеживает автосвязывания и настраивает связи в соответствии с вашими потребностями.
 - Order: Он определяет порядок инициализации бинов.
 
@Configuration
public class AppConfig {
    @Autowired
    private ServiceA serviceA;
    
    @Autowired
    private ServiceB serviceB;
    @Bean
    @Order(1) 
    public String serviceAName() {
        return serviceA.getName();
    }
    @Bean
    @Order(2) 
    public String serviceBName() {
        return serviceB.getName();
    }
    @Bean
    public List<String> serviceNames() {
        return Arrays.asList(serviceAName(), serviceBName());
    }
}
Списки, инжектированные Spring-ом, и динамически упакованные
Также как и разные сорта кофе, бины в списке могут быть различными. В этом случае нам на помощь приходит Spring Expression Language (EL), позволяющий формировать списки динамически.
@Bean
public List<String> dynamicList() {
    return new ArrayList<>(Arrays.asList(
        "#{serviceA.getName()}",
        "#{serviceB.getDescription()}"
    ));
}
Создавайте список именно под свои задачи, способный меняться на ходу.
Неизменяемые списки: защита бинов
Чтобы наши списки не менялись неожиданно, используйте Collections.unmodifiableList(). Другой вариант —  создать всегда новый список с помощью Lists.newArrayList() от Google Guava.
@Bean
public List<String> immutableGenreList() {
    return Collections.unmodifiableList(Arrays.asList("Научная фантастика", "Фэнтези", "Детектив"));
}
Оставляйте некоторые вещи неизменяемыми, как секрет старой бабушки.
XML способ: util:list
XML альтернатива
Людям, предпочитающим конфигурацию XML, Spring предоставляет поддержку через <util:list>.
<util:list id="myList" value-type="java.lang.String">
    <value>яблоко</value>
    <value>банан</value>
    <value>вишня</value>
</util:list>
Атрибут value-type обеспечивает то, что содержимое списка всегда будет строковым.
Ссылки: Вкладывание бинов друг в друга
Элемент ref позволяет включать один бин в списки других бинов.
<util:list id="myServiceList" list-class="java.util.ArrayList">
    <ref bean="serviceA"/>
    <ref bean="serviceB"/>
</util:list>
Правильное применение свойств и аннотаций
Необходимые аннотации
Используйте аннотацию @Required, чтобы указать, что свойство обязательно должно быть настроено. Не забудьте о сеттере!
public class SomeClass {
    private List<String> жанры;
    @Required
    public void setGenres(List<String> жанры) {
        this.жанры = жанры;
    }
}
Списки с внешней конфигурацией
Применяйте @Value для инъектирования свойств из внешних источников.
@Bean
public List<String> externalConfiguredList(@Value("${жанры.список}") String[] жанры) {
    return Arrays.asList(жанры);
}
Внешняя конфигурация делает бины гибкими и динамичными.
Визуализация
Представьте себе место для хранения книг с разделами для любимых жанров.
@Configuration
public class AppConfig {
    @Bean
    public List<String> myFavoriteGenres() {
        return Arrays.asList("Научная фантастика", "Фэнтези", "Детектив");
    }
}
Используйте такие классы в вашем приложении Spring, как будто они – книги на полке.
@Autowired
private List<String> myFavoriteGenres;
Риски и их решения
Контролируемый хаос списков
Порядок элементов в списке важен. И его можно установить, применив @Order.
@Order(1)
@Bean
public Book thrillerBook() {
    return new Book("Триллер");
}
Ни одного клонирования больше
Можно обеспечить уникальность элементов списков с помощью Set или проверки бинов на этапе их создания.
@Autowired
private Set<Book> books; 
Полезные материалы
- Документация по Spring Framework – Определения Бинов — официальная документация Spring.
 - Руководство Baeldung – Определение List Bean в Spring — практическое руководство по определению и иньекции list бинов.
 - Обсуждение на StackOverflow – Создание List бинов в Spring — обсуждение о list бинах.
 - Инжектирование коллекций в Spring – Учебник — учебное пособие по инжекции коллекций.
 - Определение области видимости бина в Spring – Singleton против Prototype — руководство по использованию областей видимости бинов.
 


