- Spring AOP에서의 조인포인트: Spring AOP에서는 조인포인트가 오직 메서드 실행 시점에 한정됩니다. 즉, Spring AOP에서는 메서드 호출 시에만 어드바이스가 적용됩니다.
- 조인포인트 = 시점 = (스프링 aop에선 오직) 메서드
- 포인트컷에 의해 특정 조인포인트가 선택되면, 그 조인포인트에서 어드바이스가 실행
- 인터페이스를 구현한 클래스를 프록시화할 때는 JDK 다이나믹 프록시
- 인터페이스가 없는 구체적인 클래스를 프록시화할 때는 CGLIB
AOP Alliance
AOP Alliance는 AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)를 위한 표준 API를 정의하기 위해 만들어진 협의체입니다. 이 표준 API는 여러 AOP 프레임워크 간의 상호 운용성을 높이고, 개발자들이 특정 AOP 프레임워크에 종속되지 않은 코드를 작성할 수 있도록 돕기 위해 설계되었습니다.
AOP Alliance의 목적
AOP Alliance의 주요 목적은 다음과 같습니다:
- 표준화: AOP 관련 기능을 표준화하여, 다양한 프레임워크 간에 공통으로 사용할 수 있는 API를 제공하는 것입니다. 이를 통해, 개발자는 특정 AOP 프레임워크에 의존하지 않고도, 표준화된 API를 사용하여 AOP 기능을 구현할 수 있습니다.
- 상호 운용성: AOP Alliance는 다양한 AOP 프레임워크 간의 상호 운용성을 촉진합니다. 표준 API를 사용하면, 예를 들어 Spring AOP에서 구현한 인터셉터를 다른 AOP 프레임워크에서도 사용할 수 있게 됩니다.
- 간단함: AOP Alliance의 API는 가벼우며, 필요한 기본 기능만을 제공합니다. 복잡한 AOP 프레임워크에서도 이 표준 API를 기반으로 확장할 수 있도록 설계되었습니다.
주요 인터페이스와 클래스
AOP Alliance의 API는 몇 가지 핵심 인터페이스와 클래스를 포함하고 있습니다. 다음은 그 주요 구성 요소들입니다:
- Interceptor:
- 정의: Interceptor는 조인포인트에서 수행될 행동을 정의하는 인터페이스입니다.
- 설명: 이 인터페이스는 매우 일반적인 형태로, 메서드 호출, 필드 접근, 생성자 호출 등 다양한 조인포인트를 가로챌 수 있는 기본적인 인터페이스입니다.
- MethodInterceptor:
- 정의: MethodInterceptor는 메서드 호출을 가로채서 추가적인 로직을 수행할 수 있게 하는 인터페이스입니다.
- 설명: 이 인터페이스는 가장 많이 사용되는 인터페이스 중 하나로, 메서드 호출 전후 또는 대신 실행되는 코드를 정의하는 데 사용됩니다.
- MethodInvocation:
- 정의: MethodInvocation은 가로채진 메서드 호출에 대한 정보를 캡슐화하는 인터페이스입니다.
- 설명: 이 인터페이스는 가로채기된 메서드 호출에 대한 컨텍스트 정보를 제공하며, 원래 메서드를 호출하는 proceed() 메서드를 포함하고 있습니다.
- Joinpoint:
- 정의: Joinpoint는 AOP에서 Aspect가 적용될 수 있는 지점을 추상화한 인터페이스입니다.
- 설명: 이 인터페이스는 다양한 형태의 조인포인트에 대한 일반적인 정보를 제공합니다.
AOP Alliance의 역할
AOP Alliance는 특정 AOP 프레임워크의 구현체에 종속되지 않은 방식으로 AOP 기능을 사용할 수 있도록 도와줍니다. 이 표준 API는 다양한 AOP 프레임워크에서 사용될 수 있으며, 특히 Spring AOP에서 광범위하게 채택되었습니다. Spring AOP는 AOP Alliance의 API를 기반으로 인터페이스와 메서드를 정의하여, 개발자가 AOP 개념을 쉽게 구현할 수 있도록 지원합니다.
AOP Alliance의 영향
AOP Alliance는 AOP의 기본 개념과 디자인 패턴을 표준화하는 데 큰 역할을 했습니다. 이는 다양한 AOP 프레임워크들이 공통된 언어와 개념을 공유할 수 있게 해주었으며, 개발자들이 서로 다른 AOP 프레임워크를 배울 때 느끼는 학습 곡선을 줄이는 데 기여했습니다.
요약하자면, AOP Alliance는 AOP의 핵심 개념을 표준화하여 여러 AOP 프레임워크에서 상호 운용성을 높이는 중요한 역할을 합니다. 이를 통해 개발자는 특정 프레임워크에 의존하지 않고도 AOP 기능을 쉽게 구현하고 사용할 수 있게 되었습니다.
'Everyday Study' 카테고리의 다른 글
2024.08.27(화) { 포인트컷 익스프레션, 정적&동적 매칭, @Qualifier, @CustomAnnotation } (0) | 2024.08.27 |
---|---|
2024.08.26(월) { 조인 포인트, 어드바이스, 포인트컷, 어드바이저 } (0) | 2024.08.26 |
2024.08.22(목) { Qualified Name, @DirtiesContext, 체이닝 메서드, MOCK } (0) | 2024.08.22 |
2024.08.21(수) { enum 클래스의 자동생성되는 것, InvocationHandler } (0) | 2024.08.21 |
2024.08.20(화) { 클래스 로더, .invoke, seald, qualified name } (0) | 2024.08.20 |