BackEnd/Spring & Springboot Study

예제로 배우는 스프링 프레임워크 입문 - 스프링@AOP 실습

AOP 적용 예제

@LogExecutionTime 으로 메소드 처리 시간 로깅하기

 

@LogExecutionTime 애노테이션 (어디에 적용할지 표시 해두는 용도)

 
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

 

실제 Aspect (@LogExecutionTime 애노테이션 달린곳에 적용)

@Component
@Aspect
public class LogAspect {

   Logger logger = LoggerFactory.getLogger(LogAspect.class);

   @Around("@annotation(LogExecutionTime)")
   //@Around Annotation으로 JoinPoint받아 Target Method지정
   //proceed 전 후로 stopWatch 실행
   public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
       StopWatch stopWatch = new StopWatch();
       stopWatch.start();

       Object proceed = joinPoint.proceed();

       stopWatch.stop();
       logger.info(stopWatch.prettyPrint());

       return proceed;
   }

}

 

@Around, @Before, @After, Exception 처리, Bean으로 생성, 특정 메서드 지정 등등

AOP는 내용이 많다.

 

Intellij는 AOP가 어디에 적용 되는지 보여줌 (Community X)

 

https://github.com/devjun63/spring-petclinic/commit/367eea4b93b8dcb41ececd901a3c6a8f1818f989

 

AOP 실습 · devjun63/spring-petclinic@367eea4

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

github.com