Весна - создание бобов из коллекции или карты - PullRequest
2 голосов
/ 18 июня 2019

Некоторое время назад я читал о создании bean-компонентов в Spring, и есть исключение при создании bean-компонентов для коллекций и карт.Я имею в виду, чтобы создать bean-компонент для коллекции или карты, необходимо создать класс-оболочку, например, со списком в качестве поля этого класса

public class CollectionBean {

  private List<String> someList;

}

, а затем его можно использовать для внедрения зависимостей.Интересно, почему это не может быть введено без класса оболочки?

1 Ответ

5 голосов
/ 18 июня 2019

Вы можете создавать бины, которые являются коллекциями:

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.

Один из способов обойти это - создать класс-оболочку, как вы уже сделали. Другой способ - использовать один из многих других способов устранения неоднозначности автопроводки - например, по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...