본문 바로가기

Blog/Spring

스프링 프레임워크 입문 - AOP 적용 예제

 

  • AOP  적용 예제

@LogExecutionTime 이라는 애노테이션이 있다고 가정하고 일단 성능측정(스탑와치) 하고 싶은 부분에 달기

그리고 그 애노테이션 생성

 

// 애노테이션 설정

@Target(ElementType.METHOD) // 이 애노테이션을 어디에 쓰겠다.
@Retention(RetentionPolicy.RUNTIME) // 이 애노테이션 정보를 언제까지 유지할 것인가, 런타임까지 
public @interface LogExecutionTime{
  
}

 

 

이제 이 애노테이션을 읽어 처리하는 aspect 만들기

LogAspect 클래스

@Component // 빈으로 등록이 되어야 하기 때문
@Aspect // aspect다
public class LogAspect{
    
    Logger logger = LoggerFactory.getLogger(LogAspect.class);

    @Around("@annotation(LogExecutionTime)") // 어라운드를 하면 조인포인트를 쓸 수 있음, joinpoint는 타겟(LogExecutionTime 애노테이션이 붙은 메소드)를 의미
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable{

        StopWatch stopWatch = new StopWatch();
        
        stopWatch.start();
        
        Object proceed = joinPoint.proceed(); // 그 메소드 실행하겠따. 대신 앞 뒤에 코드가 추가되는 것
        
        stopWatch.stop();
        
        logger.info(stopWatch.perttyPrint());

        return proceed;

    }
}

 

위의 예제가 적용되는 OwnerController는 (즉 실행되는 메소드들이 있는 클래스) 그 전의 예제인 Cash 클래스와 같은 것임, 타겟이다. aspect를 적용할 타겟

 

Aspect는 그 전의 CreditCard(CashPerf)와 같음