Описание тега cdi
Внедрение контекстов и зависимостей (CDI) - это новая спецификация Java EE 6, которая не только определяет мощное и безопасное для типов внедрение зависимостей, но также вводит понятие "контекстных" ссылок или областей.
Буква C в CDI- это основное различие между EJB-компонентами и управляемыми компонентами CDI. Компоненты, управляемые CDI, являются контекстными, а компоненты EJB - нет. Управляемые компоненты в CDI живут в четко определенной области. Они создаются и уничтожаются контейнером по запросу. CDI уже поставляется с предопределенными областями действия и аннотациями:
@RequestScoped
@SessionScoped
@ApplicationScoped
@ConversationScoped
.
Контейнер CDI автоматически управляет всеми компонентами внутри области видимости. В концеHttpSession
или HttpRequest, все экземпляры, связанные с этой областью, автоматически уничтожаются и, таким образом, собираются сборщиком мусора.
Это поведение сильно отличается от поведения сессионных компонентов с отслеживанием состояния. Экземпляр сессионного компонента с отслеживанием состояния должен быть явно удален клиентом при вызове метода, помеченного@Remove
. Контейнер не уничтожит его автоматически; он не привязан ни к какому контексту. Если вы связываете сессионный компонент с отслеживанием состояния сHttpSession
, вы также должны позаботиться о его надежном уничтожении в конце или по истечении времени ожидания HttpSession
.
Контекстуальная природа CDI делает использование компонентов из разных областей более естественным и удобным. Вы даже можете смешивать и сопоставлять области и вводить бобы из разных областей. Контейнер по-прежнему заботится о правильном управлении жизненным циклом.