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
'BackEnd > Spring & Springboot Study' 카테고리의 다른 글
26. 프로필 수정 테스트 (0) | 2021.12.24 |
---|---|
예제로 배우는 스프링 프레임워크 입문 - 스프링 PSA (0) | 2021.12.08 |
예제로 배우는 스프링 프레임워크 입문 - 프록시 패턴 (0) | 2021.12.03 |
예제로 배우는 스프링 프레임워크 입문 - 스프링 AOP (0) | 2021.12.03 |
예제로 배우는 스프링 프레임워크 입문 - 의존성 주입 (Dependency Injection) (0) | 2021.12.01 |