AOP Advice 용어 정의 (Aspect Oriented Programming)

오목조목·2023년 10월 11일
post-thumbnail

AOP(관점 지향 프로그래밍) Advice 용어 정리

Advice

  • Aspect가 해야 할 작업
  • Aspect의 "What", "When"을 정의

스프링 aspect가 지원하는 advice들

  • before : advice 대상 메서드가 호출되기 전에 advice 기능을 수행

  • after : 결과에 상관없이 advice 대상 메서드가 완료된 후에 advice 기능을 수행

  • after-returning : advice 대상 메서드가 성공적으로 완료된 후에 advice 기능을 수행

  • after-throwing : advice 대상 메서드가 완료되기 전에 throwing이 반환되었을 경우 기능을 수행


Advice를 사용할 때 유용한 것들

  • PointCut : advice의 경로를 간략하게 만들 수 있다( 어떤 메소드가 AOP 어드바이스의 대상이 되는지를 선택)

  • Around : 위의 advice의 내용들을 하나로 묶을 수 있다 (조인 포인트를 완전히 대체하거나 변경할 수 있는 가장 강력한 유형의 어드바이스)


Example

Before

//perform 메서드를 수행하기 전에, 이것부터 수행된다.
@Before("execution(* com.seomoon.concert.Perfomance.perform(..))")
    public void silencedCellPhone() {
        System.out.println("Silencing cellphone");
    }

@Before("execution(* com.seomoon.concert.Perfomance.perform(..))")
    public void takeSeats() {
        System.out.println("Taking seats");
    }

//동일한 시기의 어드바이스가 두가지 일 경우, 순서를 보장할 수는 없다.
//order 어드바이스를 통해 순서를 고정적으로 처리할 수 있다.

AfterReturning

//공연이 성공적으로 끝난 후	
@AfterReturning("execution(* com.seomoon.concert.Perfomance.perform(..))")
  public void applause() {
      System.out.println("CLAP CLAP CLAP!!!");
  }

AfterThrowing

//공연이 성공적으로 끝나지 못하고 Throwing을 반환했을 때
		@AfterThrowing("execution(* com.seomoon.concert.Perfomance.perform(..))")
    public void demandRefund() {
        System.out.println("Demanding a refund");
    }

PointCut

//Pointcut을 통해 경로 간략화 ex) @Before("performance()") 	  
		@Pointcut("execution(* com.seomoon.concert.Perfomance.perform(..))")
    public void performance() {}

Around

//Around를 통해 위의 내용들을 하나로 만듬. 		
@Around("performance()")
public void WatchPerformance(ProceedingJoinPoint jp) {

        try {
            System.out.println("Silencing cellphone");
            System.out.println("Taking seats");
            jp.proceed();
            System.out.println("CLAP CLAP CLAP!!!");
        } catch (Throwable e) {
            System.out.println("Demanding a refund");
        }

    }
profile
블로그 이전중입니다 https://www.notion.so/2465adc69d7e805a9fd1e1ca971d657d?source=copy_link

0개의 댓글