AOP(Aspect Oriented Programming)
- 공통 관심 사항(croos-sutting concern)과 핵심 관심 사항(core concern)을 분리하기 위해 사용
@Pointcut
이나 advice의 다양한 애노테이션을 사용해 원하는 적용 대상만 선택해 적용할 수 있다- AOP가 적용되면 프록시로 해당 타겟을 실행하게 된다 -> 프록시가 실제 메서드나 클래스를 호출하는 방식으로 의존관계가 변경 됨
AOP 활성화
스프링 부트 메인 클래스에 @EnableAspectJAutoProxy
애노테이션을 추가한다.
Aspect 작성
@Aspect
애노테이션을 추가
@Aspect
public class TimeTractApp {
}
Pointcut
Pointcut
은 Advice
의 실행 시기를 제어한다. @Pointcut
애노테이션과 표현식(point cut designator (PCD))을 이용해 정의한다. Pointcut
은 일반 메서드(void)를 정의하여 사용한다.
@Pointcut(...) // pointcut 표현식
public void onExecute() { } // pointcut 생성
Pointcut
의 표현식에서 사용할 수 있는 지정자는 아래와 같다.
execution
within
this
target
args
@target
@args
@within
@annotation
Pointcut
표현식은 &&
, ||
, !
을 사용해 표현식을 결합할 수도 있다.
Advice
Advice
는 aspect에 의해 실질적으로 실행하는 부분이다.
pointcut과 일치하는 메서드의 실행 전, 후 혹은 전, 후 모두 (around)에 실행된다.
pointcut을 참조하거나 표현식을 선언하여 사용한다.Advice
는 @Before
, @After
, @Around
의 애노테이션을 사용해 정의한다.
@Before
: 일치하는 메서드가 실행되기 전@After
: 일치하는 메서드가 완료된 뒤@AfterReturning
: 일치하는 메서드가 정상적으로 실행된 뒤@AfterThrowing
: 일치하는 메서드가 예외를 발생했을 경우@Around
: 일치하는 메서드를 감싼다, 메서드 호출 전과 호출 후.Around
는 반드시proceed()
메서드가 호출되어야 한다.
참고
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | logback.xml 파일 경로 설정 (0) | 2021.04.22 |
---|---|
Spring Boot | AOP를 활용해 request마다 로그 출력하기 ( REST API ) (0) | 2021.04.19 |
Spring Boot | @ConfigurationProperties 알아보기 (0) | 2021.04.15 |
Spring Boot | JPA 사용해보기 (1) + H2데이터베이스 설치 (0) | 2021.04.06 |
Spring Boot | profile설정 ( + 2.4이상 버전 변경내용 추가 ) (0) | 2021.04.05 |