참고 : AOP
BeanPostProcessor
를 구현한 Proxy Bean을 만들어 라이프사이클에 등록함<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Component
@Aspect // Aspect 클래스 정의
public class Foo {
...
}
@Around("PointCut 패턴")
public void foo(ProceedingJoinPoint pjp) {
System.out.println("BEFORE");
pjp.proceed(); // Target 실행
System.out.println("AFTER");
}
@Before("...") // Target 실행 전
@After("...") // Target 실행 후
@AfterReturing("...") // Target에서 return된 후
@AfterThrowing("...") // Target에서 예외가 throw된 후
public void foo() { ... }
"execution(* com.example..*.Foo.*(..))"
: com.example 패키지의, Foo 클래스 안의 모든 메소드가 Target"@annotation(Foo)"
: Foo annotation이 붙은 모든 메소드가 Target"bean(Foo)"
: Foo Bean의 모든 public 메소드가 Target