Вы можете создавать бины, которые являются коллекциями:
public class CollectionsBean {
@Autowired
private List<String> nameList;
public void printNameList() {
System.out.println(nameList);
}
}
@Configuration
public class CollectionConfig {
@Bean
public CollectionsBean getCollectionsBean() {
return new CollectionsBean();
}
@Bean
public List<String> nameList() {
return Arrays.asList("John", "Adam", "Harry");
}
}
Что может вызвать путаницу, так это то, что Java отбрасывает обобщенную часть типа при компиляции. Поэтому Spring не может смотреть на объект во время выполнения и знать, является ли он List<String>
или List<Integer>
- для Java и Spring, во время выполнения это просто List
.
Это означает, что автопроводка на основе типов не будет работать, если имеется более одного компонента типа List
.
Один из способов обойти это - создать класс-оболочку, как вы уже сделали. Другой способ - использовать один из многих других способов устранения неоднозначности автопроводки - например, по имени.