Collections in spring java

Весна — впрыскивание коллекций

В этом уроке мы покажем, какinject Java collections using the Spring framework.

Проще говоря, мы продемонстрируем примеры с интерфейсами сбораList, Map, Set.

2. List с@Autowired

Давайте создадим пример bean-компонента:

public class CollectionsBean < @Autowired private ListnameList; public void printNameList() < System.out.println(nameList); >>

Здесь мы объявили свойствоnameList для храненияList значенийString.

In this example, we use field injection for nameList. Therefore, we put the @Autowired annotation.

Чтобы узнать больше о внедрении зависимостей или различных способах ее реализации, ознакомьтесь с этимguide.

После этого мы регистрируемCollectionsBean в классе настройки конфигурации:

@Configuration public class CollectionConfig < @Bean public CollectionsBean getCollectionsBean() < return new CollectionsBean(); >@Bean public List nameList() < return Arrays.asList("John", "Adam", "Harry"); >>

Помимо регистрацииCollectionsBean, мы также вводим новый список, явно инициализируя и возвращая его как отдельную конфигурацию@Bean.

Теперь мы можем проверить результаты:

ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); CollectionsBean collectionsBean = context.getBean( CollectionsBean.class); collectionsBean.printNameList();

Выходные данные метода printNameList ():

3. Set с внедрением конструктора

Чтобы настроить тот же пример с коллекциейSet, давайте изменим классCollectionsBean :

public class CollectionsBean < private SetnameSet; public CollectionsBean(Set strings) < this.nameSet = strings; >public void printNameSet() < System.out.println(nameSet); >>

This time we want to use a constructor injection for initializing the nameSet property. Это требует также изменений в классе конфигурации:

@Bean public CollectionsBean getCollectionsBean() < return new CollectionsBean(new HashSet<>(Arrays.asList("John", "Adam", "Harry"))); >

4. Map с впрыском через сеттер

Следуя той же логике, давайте добавим поле nameMap, чтобы продемонстрировать внедрение карты:

public class CollectionsBean < private MapnameMap; @Autowired public void setNameMap(Map nameMap) < this.nameMap = nameMap; >public void printNameMap() < System.out.println(nameMap); >>

На этот разwe have a setter method in order to use a setter dependency injection. Нам также необходимо добавить код инициализацииMap в класс конфигурации:

@Bean public Map nameMap() < MapnameMap = new HashMap<>(); nameMap.put(1, "John"); nameMap.put(2, "Adam"); nameMap.put(3, "Harry"); return nameMap; >

Результаты после вызова методаprintNameMap():

5. Внедрение ссылок на бин

Давайте посмотрим на пример, в котором мы внедряем ссылки на компоненты как элементы коллекции.

Сначала давайте создадим bean-компонент:

И добавьтеList изexampleBean в качестве свойства в классCollectionsBean :

public class CollectionsBean < @Autowired(required = false) private ListbeanList; public void printBeanList() < System.out.println(beanList); >>

Затем мы добавляем фабричные методы конфигурации Java для каждого элементаexampleBean:

@Configuration public class CollectionConfig < @Bean public exampleBean getElement() < return new exampleBean("John"); >@Bean public exampleBean getAnotherElement() < return new exampleBean("Adam"); >@Bean public exampleBean getOneMoreElement() < return new exampleBean("Harry"); >// other factory methods >

Контейнер Spring вставляет отдельные bean-компоненты типаexampleBean в одну коллекцию.

Чтобы проверить это, мы вызываем методcollectionsBean.printBeanList(). Выходные данные показывают имена компонентов в виде элементов списка:

Теперьlet’s consider a scenario when there is not a exampleBean. Если в контексте приложения не зарегистрированexampleBean, Spring выдаст исключение, поскольку требуемая зависимость отсутствует.

Мы можем использовать@Autowired(required = false), чтобы пометить зависимость как необязательную. Вместо выдачи исключенияbeanList не будет инициализирован, а его значение останетсяnull.

Если нам нужен пустой список вместоnull,, мы можем инициализироватьbeanList новымArrayList:

@Autowired(required = false) private List beanList = new ArrayList<>();

5.1. Использование@Order для сортировки бобов

We can specify the order of the beans while injecting into the collection.

Для этого мы используем аннотацию@Order и указываем индекс:

@Configuration public class CollectionConfig < @Bean @Order(2) public exampleBean getElement() < return new exampleBean("John"); >@Bean @Order(3) public exampleBean getAnotherElement() < return new exampleBean("Adam"); >@Bean @Order(1) public exampleBean getOneMoreElement() < return new exampleBean("Harry"); >>

Spring container first will inject the bean with the name “Harry”, так как он имеет наименьшее значение порядка.

Затем он внедрит“John”, и, наконец, bean-компонент“Adam”:

Узнайте больше о@Order в этомguide.

5.2. Использование@Qualifier для выбора фасоли

Мы можем использовать@Qualifier для выбора bean-компонентов, которые будут вставлены в конкретную коллекцию, которая соответствует имени@Qualifier.

Вот как мы используем его для точки инъекции:

@Autowired @Qualifier("CollectionsBean") private List beanList;

Затем мы помечаем тем же@Qualifier бины, которые мы хотим внедрить вList:

@Configuration public class CollectionConfig < @Bean @Qualifier("CollectionsBean") public exampleBean getElement() < return new exampleBean("John"); >@Bean public exampleBean getAnotherElement() < return new exampleBean("Adam"); >@Bean public exampleBean getOneMoreElement() < return new exampleBean("Harry"); >// other factory methods >

В этом примере мы указываем, что компонент с именем“John” will будет внедрен вList с именем“CollectionsBean”. Результаты мы тестируем здесь:

ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class); CollectionsBean collectionsBean = context.getBean(CollectionsBean.class); collectionsBean.printBeanList();

Из вывода мы видим, что наша коллекция имеет только один элемент:

Источник

Spring – Внедрение коллекций

В этом руководстве мы собираемся показать, как внедрять коллекции Java с помощью среды Spring .

Проще говоря, мы продемонстрируем примеры с интерфейсами коллекции List, Map, Set .

2. Список с @Autowired

Давайте создадим пример bean-компонента:

 public class CollectionsBean     @Autowired   private ListString> nameList;    public void printNameList()    System.out.println(nameList);   >   > 

Здесь мы объявили свойство nameList для хранения списка строковых значений .

В этом примере мы используем внедрение полей для nameList . Поэтому ставим аннотацию @Autowired .

Чтобы узнать больше о внедрении зависимостей или различных способах его реализации, ознакомьтесь с этим руководством .

После этого мы регистрируем CollectionsBean в классе настройки конфигурации:

 @Configuration   public class CollectionConfig     @Bean   public CollectionsBean getCollectionsBean()    return new CollectionsBean();   >    @Bean   public ListString> nameList()    return Arrays.asList("John", "Adam", "Harry");   >   > 

Помимо регистрации CollectionsBean , мы также вводим новый список, явно инициализируя и возвращая его как отдельную конфигурацию @Bean .

Теперь мы можем проверить результаты:

 ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class);   CollectionsBean collectionsBean = context.getBean(   CollectionsBean.class);  collectionsBean.printNameList(); 

Вывод метода printNameList():

3. Установить с внедрением конструктора

Чтобы настроить тот же пример с коллекцией Set , давайте изменим класс CollectionsBean :

 public class CollectionsBean     private SetString> nameSet;    public CollectionsBean(SetString> strings)    this.nameSet = strings;   >    public void printNameSet()    System.out.println(nameSet);   >   > 

На этот раз мы хотим использовать внедрение конструктора для инициализации свойства nameSet . Это требует также изменений в классе конфигурации:

 @Bean   public CollectionsBean getCollectionsBean()    return new CollectionsBean(new HashSet>(Arrays.asList("John", "Adam", "Harry")));   > 

4. Карта с внедрением сеттера

Следуя той же логике, давайте добавим поле nameMap для демонстрации внедрения карты:

 public class CollectionsBean     private MapInteger, String> nameMap;    @Autowired   public void setNameMap(MapInteger, String> nameMap)    this.nameMap = nameMap;   >    public void printNameMap()    System.out.println(nameMap);   >   > 

На этот раз у нас есть метод setter, чтобы использовать инъекцию зависимостей setter . Нам также нужно добавить код инициализации карты в класс конфигурации:

 @Bean   public MapInteger, String> nameMap()   MapInteger, String> nameMap = new HashMap>();   nameMap.put(1, "John");   nameMap.put(2, "Adam");   nameMap.put(3, "Harry");   return nameMap;   > 

Результаты после вызова метода printNameMap() :

5. Внедрение ссылок на компоненты

Давайте рассмотрим пример, в котором мы вводим ссылки на bean-компоненты как элементы коллекции.

Во-первых, давайте создадим bean-компонент:

 public class ForEachBean     private String name;    // constructor   > 

И добавьте список ForEachBean в качестве свойства в класс CollectionsBean :

 public class CollectionsBean     @Autowired(required = false)   private ListForEachBean> beanList;    public void printBeanList()    System.out.println(beanList);   >   > 

Затем мы добавляем фабричные методы конфигурации Java для каждого элемента ForEachBean :

 @Configuration   public class CollectionConfig     @Bean   public ForEachBean getElement()    return new ForEachBean("John");   >    @Bean   public ForEachBean getAnotherElement()    return new ForEachBean("Adam");   >    @Bean   public ForEachBean getOneMoreElement()    return new ForEachBean("Harry");   >    // other factory methods   > 

Контейнер Spring внедряет отдельные компоненты типа ForEachBean в одну коллекцию.

Чтобы проверить это, мы вызываем метод collectionsBean.printBeanList() . Вывод показывает имена bean-компонентов в виде элементов списка:

Теперь давайте рассмотрим сценарий, когда ForEachBean отсутствует . Если в контексте приложения не зарегистрирован ForEachBean , Spring выдаст исключение из-за отсутствия требуемой зависимости.

Мы можем использовать @Autowired(required = false) , чтобы пометить зависимость как необязательную. Вместо создания исключения beanList не будет инициализирован, и его значение останется нулевым .

Если нам нужен пустой список вместо null, мы можем инициализировать beanList новым ArrayList:

 @Autowired(required = false)   private ListForEachBean> beanList = new ArrayList>(); 

5.1. Использование @Order для сортировки компонентов

Мы можем указать порядок bean-компонентов при внедрении в коллекцию .

Для этого используем аннотацию @Order и указываем индекс:

 @Configuration   public class CollectionConfig     @Bean   @Order(2)   public ForEachBean getElement()    return new ForEachBean("John");   >    @Bean   @Order(3)   public ForEachBean getAnotherElement()    return new ForEachBean("Adam");   >    @Bean   @Order(1)   public ForEachBean getOneMoreElement()    return new ForEachBean("Harry");   >   > 

Контейнер Spring сначала введет bean-компонент с именем «Harry» , так как он имеет наименьшее значение порядка.

Затем он внедрит бин «John» и, наконец, бин «Adam» :

Узнайте больше о @Order в этом руководстве .

5.2. Использование @Qualifier для выбора компонентов

Мы можем использовать @Qualifier , чтобы выбрать bean-компоненты для внедрения в конкретную коллекцию, которая соответствует имени @Qualifier .

Вот как мы используем его для точки впрыска:

 @Autowired   @Qualifier("CollectionsBean")   private ListForEachBean> beanList; 

Затем мы помечаем тем же @Qualifier bean-компоненты, которые мы хотим внедрить в список :

 @Configuration   public class CollectionConfig     @Bean   @Qualifier("CollectionsBean")   public ForEachBean getElement()    return new ForEachBean("John");   >    @Bean   public ForEachBean getAnotherElement()    return new ForEachBean("Adam");   >    @Bean   public ForEachBean getOneMoreElement()    return new ForEachBean("Harry");   >    // other factory methods   > 

В этом примере мы указываем, что bean-компонент с именем «John» будет внедрен в список с именем «CollectionsBean» . Результаты, которые мы тестируем здесь:

 ApplicationContext context = new AnnotationConfigApplicationContext(CollectionConfig.class);   CollectionsBean collectionsBean = context.getBean(CollectionsBean.class);  collectionsBean.printBeanList(); 

Из вывода мы видим, что наша коллекция имеет только один элемент:

6. Установка пустого списка в качестве значения по умолчанию

Мы можем установить значение по умолчанию для введенного свойства List как пустой список, используя статический метод Collections.emptyList() :

 public class CollectionsBean     @Value("$#")   private ListString> nameListWithDefaultValue;    public void printNameListWithDefaults()    System.out.println(nameListWithDefaultValue);   >   > 

Если мы запустим это с ключом «names.list», не инициализированным через файл свойств:

 collectionsBean.printNameListWithDefaults(); 

На выходе мы получим пустой список:

Источник

Читайте также:  Host site hosting and technology html template
Оцените статью