Статьи

Basic Injection / Qualifiers, Scope

Это продолжение основ DI / CDI, рассмотренных на прошлой неделе — в этом посте я буду обсуждать базовые инъекции, квалификаторы и область применения.

В нашей последней теме мы получили много информации о понятиях DI / CDI, мы также обсудили, как эти bean-компоненты или классы загружаются с помощью аннотаций, которые составляют композицию объекта, и создали примеры того, как мы можем объявить их программно. В этом посте мы подробнее рассмотрим часть внедрения, например, как получить определенный ресурс и внедрить его в другой ресурс для использования.

Итак, как ввести боб в первую очередь?

Основная инъекция

Как вы вводите боб?

  • Используйте @Inject <Java-Type> <variable> для внедрения поля
  • <Java-Type> может быть классом Java или интерфейсом Java
1
2
3
4
5
6
7
8
public class MyGreeter {
   // Inject Greeting object for field injection
   @Inject Greeting greeting;
   public sayGreeting(String name){
      // You can then used the injected Greeting object
      System.out.println(greeting.greet(name));
   }
}

Где можно вводить бобы?

Бин можно вводить в «точках инъекции»

  • поле
  • Параметр метода

Метод может быть:

  • Конструктор (полезно для созданного неизменяемого объекта)> Инициализатор
  • Метод сеттера
  • Режиссер
  • наблюдатель
01
02
03
04
05
06
07
08
09
10
11
public class MyGreeter {
   private Greeting greeting;
   // Use constructor method injection
   @Inject
   public MyGreeter(Greeting greeting) {
      this.greeting = greeting;
   }
   public sayGreeting(String name){
      System.out.println(greeting.greet(name));
   }
}

Отборочные

Классификаторы используются для назначения конкретного компонента, если существует несколько типов реализации (интерфейс и дочерние классы). Допустим, у вас есть два кандидата (класс реализации) для конкретного интерфейса:

  • Интерфейс Человек
  • 1 класс — обычный человек
  • Класс 2 — не регулярное лицо

c_diagram_person

Мы можем использовать Qualifiers, чтобы четко обозначить реализацию классов, введя / создав собственную аннотацию Qualifier:

RegularPerson Qualifier Аннотация:

p_qualifier

NonRegularPerson Qualifier Аннотация:

non_reg_qualifier

Теперь нам нужно создать класс реализации и пометить его как созданный нами классификатор.

RegularPersonImpl:

regular_impl

NonRegularPersonImpl:

non_reg_impl

Примечание. У вас может быть как можно больше классификаторов — помните, что классификаторы предназначены для отделения реализации логических объектов от ее общего интерфейса.

Теперь, когда реализация установлена, мы можем теперь внедрить класс и использовать его квалификатор.

осущ

В этом примере вы можете ясно увидеть использование, введя Qualifier, разработчик может четко указать тип реализации по аннотации.

Загрузите пример здесь .

Другие вещи, которые вы можете сделать с квалификаторами?

Я не буду обсуждать дальше, что еще вы можете сделать с квалификаторами, вместо этого я дам вам проверить эти примеры, чтобы вы могли попробовать их изучить:

Сфера

Почему в первую очередь нам нужен Scope на наших объектах? — Для веб-приложений нам нужно, чтобы наши компоненты сохраняли состояние в течение всего времени взаимодействия пользователя с приложением, например, при множественных запросах к серверу.

Существует 5 типов областей, которые разработчики могут назначить объекту:

  • @ Зависимый (по умолчанию)
    • Область по умолчанию, если она не указана; это означает, что объект существует для обслуживания ровно одного клиента (бина) и имеет тот же жизненный цикл, что и этот клиент (бин).
  • @RequestScoped
    • Состояние объекта поддерживается во время взаимодействия пользователя с веб-приложением в одном HTTP-запросе.
  • @SessionScoped
    • Состояние объекта поддерживается во время взаимодействия пользователя с веб-приложением по нескольким HTTP-запросам.
  • @ApplicationScoped
    • Общее состояние всех взаимодействий пользователей с веб-приложением.
  • @ConversationScoped
    • Контекст разговора четко разграничивается приложением
      • Охватывает несколько запросов
      • Но «Меньше» чем сессия
    • Используется, когда вы хотите иметь явные границы нескольких разговоров в течение одного сеанса

Я не буду вдаваться в детали, но я приведу вам реальные примеры, которые вы можете использовать. Загрузите проекты здесь.

Следующая остановка: DI / CDI — Advance

С помощью этих новых функций вы можете четко наблюдать и представлять, как это повысит производительность труда разработчиков за счет упрощения множества процессов для настройки веб-приложения. Можно создавать классификаторы для четкого разделения логических / бизнес-компонентов с общей целью (по интерфейсу), определяя область видимости. Позвольте разработчикам контролировать поток и управлять состоянием объектов — и упрощение вызова bean-компонентов непосредственно из пользовательского интерфейса через EL делает его более простым.

Пожалуйста, проверьте образцы и попробуйте сами, лучше проверить реальный пример, чем просто прочитать подробности и концепции. Наслаждайтесь!