2023. 5. 22. 15:10ㆍSpring Framework/Aspect Oriented Programming with Spring
@AspectJ
@AspectJ는 애노테이션을 사용하여 일반적인 자바 클래스로 어드바이스를 선언하는 스타일을 의미합니다. @AspectJ 스타일은 AspectJ 5 릴리스의 일환으로 AspectJ 프로젝트에서 도입되었습니다. Spring은 포인트컷을 해석하고 매칭[match:연결]하기 위해 AspectJ에서 제공하는 라이브러리를 사용하여 동일한 애노테이션을 AspectJ 5처럼 해석합니다. 그러나 AOP 런타임은 여전히 순수한 Spring AOP로 동작하며, AspectJ 컴파일러나 위버(weaver)에 대한 의존성은 없습니다.
AspectJ 컴파일러와 위버를 사용하면 전체 AspectJ 언어를 사용할 수 있으며, 이에 대한 내용은 "Using AspectJ with Spring Applications"에서 다루고 있습니다.
AspectJ vs. Spring AOP
- AspectJ: AspectJ는 컴파일 시, 컴파일 후(바이너리 위빙), 그리고 로드 타임 위빙을 제공하는 완전한 AOP 프레임워크로, 애스펙트를 정의하고 적용하는 데 있어 광범위한 기능을 제공합니다. AspectJ는 Spring 빈뿐만 아니라 모든 Java 객체에 애스펙트를 적용할 수 있습니다.
- Spring AOP: Spring AOP는 Spring 프레임워크의 일부로, 프록시 기반 AOP 프레임워크입니다. AspectJ의 기능 중 일부를 제공하며, 주로 Spring에서 관리되는 빈의 메서드 수준에서의 인터셉션에 제한됩니다.
@AspectJ 스타일
사람들이 "AspectJ 스타일"이라고 말할 때, 이는 일반적으로 Spring 내에서 애스펙트를 정의하기 위해 AspectJ 어노테이션을 사용하는 것을 의미합니다. Spring은 @Aspect, @Before, @After 등과 같은 AspectJ 스타일 어노테이션을 지원하며, 이들은 org.aspectj.lang.annotation 패키지에 속합니다. 이 스타일은 XML 구성 대신 어노테이션을 사용하여 애스펙트를 작성할 수 있게 하여 더 선언적이고 간결하게 만듭니다.
AspectJ의 주요 어노테이션 (Spring AOP에서 사용됨)
- @Aspect: 클래스를 애스펙트로 표시합니다.
- @Before: 특정 메서드가 실행되기 전에 실행될 advice를 정의합니다.
- @After: 메서드의 실행 결과와 상관없이, 특정 메서드 실행 후에 실행될 advice를 정의합니다.
- @Around: 메서드 실행을 감싸는 advice를 정의하여 실행 과정을 제어할 수 있게 합니다.
- @AfterReturning: 메서드가 성공적으로 반환된 후에 실행될 advice를 정의합니다.
- @AfterThrowing: 메서드가 예외를 던질 때 실행될 advice를 정의합니다.
- @Pointcut: 재사용 가능한 포인트컷을 정의합니다.
@AspectJ라는 어노테이션은 존재하지 않지만, AspectJ 어노테이션은 Spring AOP 내에서 애스펙트를 정의하는 데 광범위하게 사용됩니다. 이러한 접근 방식은 Spring 문서에서 "AspectJ 스타일 어노테이션" 또는 "AspectJ 문법"으로 자주 언급됩니다.
Section Summary
'Spring Framework > Aspect Oriented Programming with Spring' 카테고리의 다른 글
Declaring Advice (0) | 2023.05.23 |
---|---|
Spring instrument library (0) | 2023.05.22 |
DelegatingIntroductionInterceptor의 delegate 객체 생성 (0) | 2023.05.19 |
Java Agent (0) | 2023.05.17 |
AOP Concepts, Spring AOP Capabilities and Goals, AOP Proxies (0) | 2023.05.16 |