Java EE의 인터셉터 소개

Mehvish Ashiq 2023년10월12일
  1. Java EE의 인터셉터 소개
  2. Java의 javax.interceptor 패키지
  3. Java의 인터셉터 메서드
  4. Java에서 인터셉터 메서드 및 인터셉터 클래스 사용
Java EE의 인터셉터 소개

이 기사에서는 Java EE의 인터셉터를 소개합니다. 여기에는 인터셉터 메서드, 인터셉터 클래스 및 수명 주기 콜백 인터셉터가 포함됩니다.

Java EE의 인터셉터 소개

Java EE 버전 5에서는 Enterprise JavaBeans(EJBs)에서만 인터셉터를 사용할 수 있습니다. Java EE 버전 6은 새로운 사양을 도입했지만 더 높은 수준에서 추상화되었기 때문에 더 일반적으로 적용할 수 있었습니다.

Java EE 버전 7은 Enterprise JavaBeans에서 컨테이너 관리 트랜잭션을 허용하는 @Transactional 주석을 도입했습니다. Java EE 런타임에 의해 & 구현된 인터셉터 바인딩으로 정의됩니다.

인터셉터는 대상에서 비즈니스 메소드가 호출될 때 해당 메소드가 호출되는 클래스입니다. 예를 들어 빈을 파괴하거나 생성하는 메서드와 같은 수명 주기 이벤트가 발생합니다.

교차 절단 문제를 구현하기 위해 인터셉터를 사용합니다. 예를 들어 비즈니스 로직의 보안, 감사 및 로깅이 있습니다.

인터셉터를 클래스 인터셉터 또는 메서드 인터셉터로 정의할 수 있으며 선호되는 접근 방식은 메타데이터 주석을 사용하여 인터셉터를 정의하는 것입니다. 응용 프로그램 설명자에서 정의할 수도 있지만 Java EE 서버 간에는 이식할 수 없습니다.

Java의 javax.interceptor 패키지

메타데이터 주석은 javax.interceptor 패키지에 있습니다. 메타데이터 주석의 몇 가지 예는 @AroundTimeout@AroundInvoke입니다.

javax.interceptor 패키지에는 인터셉터 클래스와 메서드를 정의하는 데 사용하는 모든 인터페이스와 주석이 있으며 인터셉터 클래스를 대상 클래스에 바인딩하는 데도 사용됩니다. 인터셉터의 기능은 Java 인터셉터 사양에 정의되어 있습니다.

인터셉터의 사양은 라이프사이클 콜백 인터셉션과 비즈니스 메서드 인터셉션이라는 두 가지 인터셉션 지점을 정의합니다. 컨텍스트 및 종속성 주입(CDI)은 이 기능을 개선하고 인터셉터를 Bean에 바인딩하기 위한 시맨틱 및 주석 기반 접근 방식으로 개선합니다.

Java의 인터셉터 메서드

대상 클래스 또는 인터셉터 클래스의 메서드입니다. 대상 클래스의 메서드 호출과 대상 클래스의 생성자 및 수명 주기 이벤트 등에 개입하기 위해 호출됩니다.

대상 클래스의 경우 대상 클래스, 인터셉터 클래스 또는 인터셉터 클래스 또는 대상 클래스의 수퍼 클래스에서 인터셉터 메서드를 선언할 수 있습니다. AroundConstruct는 인터셉터 클래스 또는 해당 슈퍼클래스에서 정의할 수 있는 유일한 메서드입니다.

AroundInvoke, AroundTimeout, PostConstructPreDestroy도 인터셉터 메서드입니다. PostConstruct, AroundConstructPreDestroy는 통칭하여 수명 주기 콜백 인터셉터 메서드라고 합니다.

인터셉터 클래스

인터셉터 클래스는 대상 클래스와 다릅니다. 인터셉터 클래스의 메서드는 대상 클래스에 대한 호출에 대한 응답으로 호출되며 대상 클래스는 여러 인터셉터 클래스와 연결할 수 있습니다.

인터셉터 클래스는 인수가 없는 공용 생성자를 포함해야 합니다. 클래스의 경우 메타데이터 주석을 사용하여 인터셉터 클래스 및 메서드를 정의하고 배포 설명자를 사용하여 인터셉터 클래스/메서드를 정의할 수도 있습니다.

인터셉터 클래스는 javax.interceptor.Interceptors 주석에 정의된 순서대로 호출됩니다. 이 순서는 고정되어 있지 않으며 배포 설명자가 이를 재정의할 수 있음을 기억하십시오.

인터셉터 라이프사이클

인터셉터 클래스의 수명 주기는 연결된 대상 클래스와 동일합니다. 대상 클래스를 인스턴스화하면 인터셉터 클래스도 인스턴스화되며 대상 클래스에서 선언하는 모든 인터셉터 클래스에 대해 수행합니다.

@PostConstruct 콜백을 호출하기 전에 모든 인터셉터 및 대상 클래스를 인스턴스화합니다. 또한 @PreDestroy 콜백을 호출하기 전에 인터셉터 대상 클래스의 인스턴스를 파괴하십시오.

Java에서 인터셉터 메서드 및 인터셉터 클래스 사용

인터셉터 메서드를 사용하려면 다음과 같이 메서드 주위에 두기만 하면 됩니다. 우리는 이것을 인터셉트 메소드 인터셉터라고 부릅니다.

@AroundTimeout public void timeoutInterceptorMethod(InvocationContext ctx){...}...

인터셉터 클래스의 경우 인터셉터 주석을 추가합니다. 인터셉터 클래스에 넣습니다.

다음 예를 참조하십시오.

예:

@Stateless
public class OrderBean {
  ... @Interceptors(OrderInterceptor.class) public void placeOrder(Order order){...}...
}

this를 확인하여 인터셉터를 자세히 살펴볼 수 있습니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook