Замечание:
Приложения, использующие дескриптор развёртывания для определения Interceptor-ов, не переносимы между серверами Java EE.
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Interceptor-ы используются в сочетании с управляемыми классами Java EE, чтобы позволить разработчикам вызывать методы Interceptor-а в связанном целевом классе в сочетании с вызовами методов или событиями жизненного цикла. Типичное использование Interceptor-ов — это регистрация, аудит и профилирование.
Хотя Interceptor-ы являются частью спецификаций Enterprise JavaBeans 3.2 и Contexts and Dependency Injection for Java EE 1.1, спецификация Interceptors 1.2 доступна для загрузки как часть технического выпуска JSR 318 Enterprise JavaBeans 3.1, доступного по ссылке http://jcp.org/en/jsr/detail?id=318
. Вы можете использовать Interceptor-ы с сессионными компонентами, управляемыми сообщениями компонентами и Managed-бинами CDI. Во всех этих случаях целевым классом Interceptor-а является класс бина.
Interceptor может быть определён в целевом классе как метод Interceptor-а или в связанном классе, называемом классом Interceptor-а. Классы Interceptor-ов содержат методы, которые вызываются вместе с методами или событиями жизненного цикла целевого класса.
Классы и методы Interceptor-ов определяются с помощью аннотаций метаданных или в дескрипторе развёртывания приложения, который содержит Interceptor-ы и целевые классы.
Замечание: Приложения, использующие дескриптор развёртывания для определения Interceptor-ов, не переносимы между серверами Java EE. |
Методы Interceptor-а в целевом классе или в классе Interceptor-а аннотируются одной из аннотаций, определённых в таблице 57-1.
Таблица 57-1 Аннотации Interceptor-ов
Аннотации Interceptor-ов |
Описание |
|
Обозначает метод как метод Interceptor-а, который получает Callback-вызов после создания целевого класса |
|
Обозначает метод как метод Interceptor-а |
|
Обозначает метод как Interceptor тайм-аута для вставки в методы тайм-аута для таймеров Enterprise-бинов |
|
Обозначает метод как метод Interceptor-а для события "конструирование завершено" жизненного цикла |
|
Обозначает метод как метод Interceptor-а для события "непосредственно перед уничтожением" жизненного цикла |
Классы Interceptor-ов могут быть обозначены необязательной аннотацией javax.interceptor.Interceptor
. Класс Interceptor-а должен иметь публичный конструктор без аргументов.
Целевой класс может иметь любое количество классов Interceptor-ов, связанных с ним. Порядок вызова классов Interceptor-ов определяется порядком, в котором классы Interceptor-ов следуют в аннотации javax.interceptor.Interceptors
. Однако этот порядок может быть переопределён в дескрипторе развёртывания.
Классы Interceptor-ов могут быть инъецируемыми объектами. Инъецирование зависимостей происходит при создании объекта класса Interceptor-а с использованием контекста именования связанного целевого класса и до вызова любых Callback-вызовов @PostConstruct
.
Классы Interceptor-ов имеют тот же жизненный цикл, что и связанный с ними целевой класс. Когда создаётся объект целевого класса, объект класса Interceptor-а также создаётся для каждого объявленного класса Interceptor-а в целевом классе. То есть, если целевой класс объявляет несколько классов Interceptor-ов, объект каждого класса создаётся при создании объекта целевого класса. Объект целевого класса и все объекты классов Interceptor-ов полностью создаются перед вызовом любых Callback-вызовов @PostConstruct
, а любые Callback-вызовы @PreDestroy
вызываются до того, как объекты целевого класса и класса Interceptor-а уничтожены.
Контексты и инъецирование зависимостей в Java EE (CDI) основаны на базовой функциональности Interceptor-ов Java EE. Для получения информации об Interceptor-ах CDI, включая обсуждение типов связывания Interceptor-ов, см. Использование Interceptor-ов в приложениях CDI.
Назад | Вперёд | Содержание |