@Aspect 프록시

justindevcode·2024년 3월 13일
0

스프링 AOP

목록 보기
10/22
post-thumbnail
post-custom-banner

@Aspect 프록시

이전까지는 우리가 포인트컷, 어드비아스를 만들어 어드바이저를 만들고 빈에 등록해서 사용했다. 이를 더 간편하게 만드는 방법이 있다.

@@Aspect사용

@Slf4j
@Aspect
public class LogTraceAspect {
 private final LogTrace logTrace;
 public LogTraceAspect(LogTrace logTrace) {
 this.logTrace = logTrace;
 }
 @Around("execution(* hello.proxy.app..*(..))")
 public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
 TraceStatus status = null;
// log.info("target={}", joinPoint.getTarget()); //실제 호출 대상
// log.info("getArgs={}", joinPoint.getArgs()); //전달인자
// log.info("getSignature={}", joinPoint.getSignature()); //join point 시그
니처
 try {
 String message = joinPoint.getSignature().toShortString();
 status = logTrace.begin(message);
 //로직 호출
 Object result = joinPoint.proceed();
 logTrace.end(status);
 return result;
 } catch (Exception e) {
 logTrace.exception(status, e);
 throw e;
 }
 }
}

원래는 어드바이스를 만드는 곳이라고 생각하면 된다. 여기애 @Aspect붙여주고 어드바이스함수위에 @Around붙여주며 포인트컷에서 썼던 경로를 입력해준다.
이런식으로 작성하면 @Around통해 포인트컷 제작가능, 함수자체가 어드바이스 이므로 스프링이 @Aspect붙은 놈을 찾아서 각각 포인트컷, 어드바이스를 만든후, 어드바이저까지 알아서 만들어 줄 수 있다.

다만 위의 class를 bean으로 등록은 해줘야한다.

@Configuration
@Import({AppV1Config.class, AppV2Config.class})
public class AopConfig {
 @Bean
 public LogTraceAspect logTraceAspect(LogTrace logTrace) {
 return new LogTraceAspect(logTrace);
 }
}

이렇게 하면 이전에 적용했던것들 포인트컷,어드바이스, 어드바이저를 직접 만들어서 아에 bean으로 넣어준것에서 프록시적용해야하는지 검증+
@Aspect붙은 놈을 통해서 스프링이 자동으로 생성해준 어드바이저도 이전과 똑같이 체크를 해줘서 필요한곳에 프록시를 사용할 수 있도록 해준다.

이런기술들이 스프링AOP의 기초 기반이라고 할 수 있으며 앞으로 AOP를 배워보자

profile
("Hello World!");
post-custom-banner

0개의 댓글