Spring에서의 AOP는 Spring에서의 IoC를 보완하는 것에 큰 목적을 갖는다.
Spring AOP는 스키마 기반 접근 방법과 @AspectJ 애너테이션 스타일을 지원한다.
@AspectJ
@AspectJ는 Annotation이 있는 일반 Java클래스로, 관점을 선언하는 스타일을 의미함
Spring AOP vs AspectJ
Spring AOP
Spring IoC에서 기본적으로 제공하는 AOP기능으로,
Spring Container가 관리하는 Bean에만 사용이 가능하다.
VS
AspectJ
자바에서 동작하는 모든 객체에 대해 AOP를 적용이 목적이다.
좋은 성능 + 강력한 기능 BUT 복잡하다
외에 더 다른 차이점 들이 있지만 지금 단계에서는 많이 복잡하다고 판단되어 스킵
Comparing Spring AOP and AspectJ | Baeldung
See advantages and disadvantages of Spring AOP and AspectJ.
www.baeldung.com
@AspectJ 활성화
Spring 설정에서 @AspectJ 를 사용하기 위해선 아래 두 가지를 설정해야 한다.
- @AspectJ aspect에 기반한 Spring AOP 설정
- aspect에 따른 자동 proxy 빈에 대한 Spring 지원 활성
- Java와 XML 두 가지 방법으로 활성화 가능
// Java 설정 (@Configuration으로 지원 활성시 @EnableAspectJAutoProxy 추가)
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}
// XML 설정
<aop:aspectj-autoproxy/>
Aspect 선언
윗 단계를 통해 @AspectJ 지원이 활성화되면 @Aspect관점이 있는 클래스(@Aspect이 붙은 클래스)로
ApplicationContext에 정의된 모든 Bean이 Spring에서 자동으로 감지되고, Spring AOP구성에 사용된다.
Pointcut 선언
Join Point 중에서 Advice가 적용될 위치를 설정하는 기능 (실행 시기 제어)
- AspectJ 표현식을 사용해서 지정
- 스프링의 AOP는 메서드 실행 지점만 Pointcut으로 설정 가능
- 따라서 Pointcut은 Spring Bean의 메서드 실행과 일치
- Pointcut 선언의 구조는 2가지의 부분으로 구성된다.
- Method Signature (메서드 이름/파라미터)
- Pointcut 표현식 (@Pointcut 사용하여 표시됨)
Advice 선언
Join Point에서 실행되는 코드
Aspect를 언제 핵심 코드에 적용할지 정의한다.
- 부가 기능(Cross-Cutting Concern)에 해당한다
- 시스템 전체 aspect에 API 호출 제공
- 각 상세 정보와 모든 메서드를 로그로 남기기 때문에 메서드 시작 전의 포인트를 선택한다.
- Advice는 Pointcut 표현식과 연관된다.
- Pointcut과 일치하는 메서드 실행 전 / 후에 실행된다.
- Pointcut 표현식은 Pointcut에 대한 단순 참조 or 제자리에 선언된 표현식일 수 있다.
'programming > SPRING' 카테고리의 다른 글
gradle reload는 중요해 (0) | 2022.06.22 |
---|---|
[TBC]AOP(Aspect Oriented Programming) (0) | 2022.06.21 |
AOP - Join Point (0) | 2022.06.20 |
AOP - Pointcut 표현식 / 지시자 (0) | 2022.06.20 |
AOP - Advice (0) | 2022.06.20 |