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의 표현식에서 사용할 수 있는 지정자는 아래와 같다.
executionwithinthistargetargs@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 |