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

예제로 배우는 스프링 프레임워크 입문 - 스프링@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

from http://devjun.tistory.com/239 by ccl(A) rewrite - 2021-12-05 18:01:20