Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Обзор Interceptor-ов

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-ов

Описание

javax.interceptor.AroundConstruct

Обозначает метод как метод Interceptor-а, который получает Callback-вызов после создания целевого класса

javax.interceptor.AroundInvoke

Обозначает метод как метод Interceptor-а

javax.interceptor.AroundTimeout

Обозначает метод как Interceptor тайм-аута для вставки в методы тайм-аута для таймеров Enterprise-бинов

javax.annotation.PostConstruct

Обозначает метод как метод Interceptor-а для события "конструирование завершено" жизненного цикла

javax.annotation.PreDestroy

Обозначает метод как метод Interceptor-а для события "непосредственно перед уничтожением" жизненного цикла

Классы Interceptor-ов

Классы Interceptor-ов могут быть обозначены необязательной аннотацией javax.interceptor.Interceptor. Класс Interceptor-а должен иметь публичный конструктор без аргументов.

Целевой класс может иметь любое количество классов Interceptor-ов, связанных с ним. Порядок вызова классов Interceptor-ов определяется порядком, в котором классы Interceptor-ов следуют в аннотации javax.interceptor.Interceptors. Однако этот порядок может быть переопределён в дескрипторе развёртывания.

Классы Interceptor-ов могут быть инъецируемыми объектами. Инъецирование зависимостей происходит при создании объекта класса Interceptor-а с использованием контекста именования связанного целевого класса и до вызова любых Callback-вызовов @PostConstruct.

Жизненный цикл Interceptor-а

Классы Interceptor-ов имеют тот же жизненный цикл, что и связанный с ними целевой класс. Когда создаётся объект целевого класса, объект класса Interceptor-а также создаётся для каждого объявленного класса Interceptor-а в целевом классе. То есть, если целевой класс объявляет несколько классов Interceptor-ов, объект каждого класса создаётся при создании объекта целевого класса. Объект целевого класса и все объекты классов Interceptor-ов полностью создаются перед вызовом любых Callback-вызовов @PostConstruct, а любые Callback-вызовы @PreDestroy вызываются до того, как объекты целевого класса и класса Interceptor-а уничтожены.

Interceptor-ы и CDI

Контексты и инъецирование зависимостей в Java EE (CDI) основаны на базовой функциональности Interceptor-ов Java EE. Для получения информации об Interceptor-ах CDI, включая обсуждение типов связывания Interceptor-ов, см. Использование Interceptor-ов в приложениях CDI.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)