네트워크

AOP 사용법

GaeGim 2022. 10. 27. 20:36
반응형
  • 코드 예시

 

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class logAop {
    // @Pointcut("execution(public void get*(..))");
    // @Pointcut("execution(* com.javalec.ex.*.*())");
    // @Pointcut("execution(* com.javalec.ex..*.*())");
    // @Pointcut("execution(* com.javalec.ex.Worker.*())");
    // @Pointcut("within(com.javalec.ex.*)");
    // @Pointcut("within(com.javalec.ex..*)");
    // @Pointcut("within(com.javalec.ex.Worker)");

    @Pointcut("bean(*ker)") //~ker로 끝나는 빈에만 적용

    private void pointcutMethod() {

    }
    
        public void beforeAdvice(JoinPoint joinPoint) {
        System.out.println("beforeAdvice()");
    }
    
    public void afterAdvice() {
        System.out.println("afterAdvice()");
    }
    
    public void afterThrowingAdvice() {
        System.out.println("afterThrowingAdvice()");
    }
    
    public void afterReturningAdvice() {
        System.out.println("afterReturningAdvice()");
    }

    @Around("pointcutMethod()")
    public Object LoggerAop(ProceedingJoinPoint joinPoint) throws Throwable {
        String signatureStr = joinPoint.getSignature().toShortString();
        System.out.println(signatureStr + " is start");
        long st = System.currentTimeMillis();

        try {
            Object obj = joinPoint.proceed();
            return obj;
        } finally {
            long et = System.currentTimeMillis();
            System.out.println(signatureStr + " is finished");
            System.out.println(signatureStr + "경과 시간 : " + (et - st));
        }
    }
    
    @Before("pointcutMethod()")
    public void beforeAdvice() {
        System.out.println("beforeAdvice()");
    }
}
}

 

 

 

 

 

 

  • 코드 분석

 

@Aspect 	//AOP로 정의하는 클래스를 지정
@Pointcut	//AOP 기능을 메서드, Annocation 등을 적용시킬 지점을 설정.
@Before		//메서드 실행 이전
@After		//정상적으로 메서드 실행 후
@AfterReturning	//메서드 정상 종료될 시
@AfterThrowing	//메서드에서 예외가 발생됐을 시
@Around		//예외가 발생해도 Before + After 모두 제어




@Pointcut("execution(public void get*(..))") // public void인 모든 get메소드
@Pointcut("execution(* com.javalec.ex.*.*())") // com.javalec.ex 패키지에 파라미터가 없는 모든 메소드
@Pointcut("execution(* com.javalec.ex..*.*())") // com.javalec.ex 패키지 & com.javalec.ex 하위 패키지에 파라미터가 없는 모든 메소드
@Pointcut("execution(* com.javalec.ex.Worker.*())") // com.javalec.ex.Worker 안의 모든 메소드
@Pointcut("within(com.javalec.ex.*)") //com.javalec.ex 패키지 안에 있는 모든 메소드
@Pointcut("within(com.javalec.ex..*)")  //com.javalec.ex 패키지 및 하위 패키지 안에 있는 모든 메소드
@Pointcut("within(com.javalec.ex.Worker)") //com.javalec.ex.Worker 모든 메소드
@Pointcut("bean(student)") //student 빈에만 적용

 

 

 

 

반응형

'네트워크' 카테고리의 다른 글

AOP - Advice 종류  (0) 2022.10.27
AOP  (0) 2022.10.27
MVC 디자인 패턴  (0) 2022.10.13