개인공부
@어노테이션 만들기!
하이후에호
2020. 8. 12. 00:25
반응형
@LogExecutionTime 어노테이션(어디에 적용할지 표시 해두는 용도)
@Target(ElementType.METHOD)
@Reltention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime{
}
실제 Aspect (@LogExecutionTime 애노테이션 달린곳에 적용)
@Component -> bean 등록용
@Aspect -> AoP (프록시) 를 알리는 어노테이션
joinPoint란 @어노테이션 만든거 붙어있는 타겟을 의미한다.
이게 Aspect고 이게 스프링 AOP다... (면접에서 그걸 물어보는 거였군..)
@Componet
@Aspect
public class LogAspect{
Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Around("@annotation(LogExecutionTime"))
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable{
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object procced = joinPoint.proceed();
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
return proceed;
}
}
반응형