-
AOP 적용 예제
@LogExecutionTime 이라는 애노테이션이 있다고 가정하고 일단 성능측정(스탑와치) 하고 싶은 부분에 달기
그리고 그 애노테이션 생성
// 애노테이션 설정
@Target(ElementType.METHOD) // 이 애노테이션을 어디에 쓰겠다.
@Retention(RetentionPolicy.RUNTIME) // 이 애노테이션 정보를 언제까지 유지할 것인가, 런타임까지
public @interface LogExecutionTime{
}
이제 이 애노테이션을 읽어 처리하는 aspect 만들기
LogAspect 클래스
@Component // 빈으로 등록이 되어야 하기 때문
@Aspect // aspect다
public class LogAspect{
Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Around("@annotation(LogExecutionTime)") // 어라운드를 하면 조인포인트를 쓸 수 있음, joinpoint는 타겟(LogExecutionTime 애노테이션이 붙은 메소드)를 의미
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable{
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object proceed = joinPoint.proceed(); // 그 메소드 실행하겠따. 대신 앞 뒤에 코드가 추가되는 것
stopWatch.stop();
logger.info(stopWatch.perttyPrint());
return proceed;
}
}
위의 예제가 적용되는 OwnerController는 (즉 실행되는 메소드들이 있는 클래스) 그 전의 예제인 Cash 클래스와 같은 것임, 타겟이다. aspect를 적용할 타겟
Aspect는 그 전의 CreditCard(CashPerf)와 같음
'Blog > Spring' 카테고리의 다른 글
08.03 - 웹 프로그래밍을 위한 언어 (0) | 2020.08.03 |
---|---|
스프링 프레임워크 입문 - PSA(Portable Service Abstraction) (0) | 2020.04.19 |
스프링 프레임워크 입문 - 프록시 패턴 (0) | 2020.04.19 |
스프링 프레임워크 입문 - AOP(Aspect Oriented Programming) (0) | 2020.04.19 |
스프링 프레임워크 입문 - 의존성 주입(Dependency Injection) (0) | 2020.04.19 |