[Spring] AOP

양정훈·2022년 8월 9일
0

참고 : AOP

  • Proxy 기반으로 구현됨
  • Bean에만 적용할 수 있음
  • Runtime 시점에 BeanPostProcessor 를 구현한 Proxy Bean을 만들어 라이프사이클에 등록함

구현

gradle

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

AOP 클래스 정의

@Component
@Aspect // Aspect 클래스 정의
public class Foo {
   ...
}

PointCut

@Around

@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() { ... }

PointCut 패턴

  • "execution(* com.example..*.Foo.*(..))" : com.example 패키지의, Foo 클래스 안의 모든 메소드가 Target
  • "@annotation(Foo)" : Foo annotation이 붙은 모든 메소드가 Target
  • "bean(Foo)" : Foo Bean의 모든 public 메소드가 Target

0개의 댓글