Это продолжение основ 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 — не регулярное лицо
Мы можем использовать Qualifiers, чтобы четко обозначить реализацию классов, введя / создав собственную аннотацию Qualifier:
RegularPerson Qualifier Аннотация:
NonRegularPerson Qualifier Аннотация:
Теперь нам нужно создать класс реализации и пометить его как созданный нами классификатор.
RegularPersonImpl:
NonRegularPersonImpl:
Примечание. У вас может быть как можно больше классификаторов — помните, что классификаторы предназначены для отделения реализации логических объектов от ее общего интерфейса.
Теперь, когда реализация установлена, мы можем теперь внедрить класс и использовать его квалификатор.
В этом примере вы можете ясно увидеть использование, введя Qualifier, разработчик может четко указать тип реализации по аннотации.
Загрузите пример здесь .
Другие вещи, которые вы можете сделать с квалификаторами?
Я не буду обсуждать дальше, что еще вы можете сделать с квалификаторами, вместо этого я дам вам проверить эти примеры, чтобы вы могли попробовать их изучить:
Сфера
Почему в первую очередь нам нужен Scope на наших объектах? — Для веб-приложений нам нужно, чтобы наши компоненты сохраняли состояние в течение всего времени взаимодействия пользователя с приложением, например, при множественных запросах к серверу.
Существует 5 типов областей, которые разработчики могут назначить объекту:
- @ Зависимый (по умолчанию)
- Область по умолчанию, если она не указана; это означает, что объект существует для обслуживания ровно одного клиента (бина) и имеет тот же жизненный цикл, что и этот клиент (бин).
- @RequestScoped
- Состояние объекта поддерживается во время взаимодействия пользователя с веб-приложением в одном HTTP-запросе.
- @SessionScoped
- Состояние объекта поддерживается во время взаимодействия пользователя с веб-приложением по нескольким HTTP-запросам.
- @ApplicationScoped
- Общее состояние всех взаимодействий пользователей с веб-приложением.
- @ConversationScoped
- Контекст разговора четко разграничивается приложением
- Охватывает несколько запросов
- Но «Меньше» чем сессия
- Используется, когда вы хотите иметь явные границы нескольких разговоров в течение одного сеанса
- Контекст разговора четко разграничивается приложением
Я не буду вдаваться в детали, но я приведу вам реальные примеры, которые вы можете использовать. Загрузите проекты здесь.
Следующая остановка: DI / CDI — Advance
С помощью этих новых функций вы можете четко наблюдать и представлять, как это повысит производительность труда разработчиков за счет упрощения множества процессов для настройки веб-приложения. Можно создавать классификаторы для четкого разделения логических / бизнес-компонентов с общей целью (по интерфейсу), определяя область видимости. Позвольте разработчикам контролировать поток и управлять состоянием объектов — и упрощение вызова bean-компонентов непосредственно из пользовательского интерфейса через EL делает его более простым.
Пожалуйста, проверьте образцы и попробуйте сами, лучше проверить реальный пример, чем просто прочитать подробности и концепции. Наслаждайтесь!