Spring Framework에서 AOP와 Annotation을 이용하여 Elapsed time을 Log에 생성하는 예제이다.
먼저 StopWatch Annotation 생성한다.
■ StopWatch.java
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface StopWatch { } |
StopWatch Annotation은 Method Level에 적용하기 때문에 @Target을 METHOD로 정의하였으며, Runtime시에 적용한다.
다음은 메소드의 수행시간을 로그에 기록하기 위해 AOP 생성한다.
■ LoggingAspect.java
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; @Aspect @Component public class LoggingAspect { @Around("@annotation(sehati.bi.annotation.StopWatch)") public Object stopWatch(ProceedingJoinPoint joinPoint) throws Throwable { StopWatch stopWatch = new StopWatch(); Object proceed = null; String className = joinPoint.getSignature().getName(); try { stopWatch.start();
proceed = joinPoint.proceed(); } finally { stopWatch.stop(); LOGGER.info("{} elapsed time :: {}", className, stopWatch.getTotalTimeMillis()); }
return proceed; } } |
@Aspect Annotation을 이용하여 AOP 를 구현한다.
@Around Advice을 적용 시 Point Cut을 StopWatch Annotation을 사용한 모든 Method는 stopWatch 메소드에 의해 호출된다.
다음은 @StopWatch Annotation 적용 예제이다.
@RequestMapping(value = "/bi/mainpage.do") @StopWatch public String mainPageView(HttpServletRequest request) throws Exception { LOGGER.info("Called :: {}", request.getRequestURL()); return "main"; } |
mainPageView를 @StopWatch Annotation을 적용해 로그에 Elasped time이 기록된다.
'Spring Framrwork' 카테고리의 다른 글
Spring Framework Custom Annotation 만들기 (0) | 2018.09.12 |
---|---|
Spring Batch Step간 데이터 공유 (0) | 2018.09.05 |
[Spring Boot] JsonView 설정 (0) | 2018.08.14 |
[Spring Boot] Exception Resolver (0) | 2018.08.14 |
[Spring Boot] Properties Configuration (0) | 2018.08.13 |