• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@Aspect 안에 여러 어드바이스 작성 시, 어드바이저는 어떻게 구성이 되나요?

22.01.31 20:41 작성 조회수 336

0

안녕하세요!

항상 좋은 강의 및 답변주셔서 감사합니다.

 

강의를 듣고 복습하던 도중 한 가지 궁금한 부분이 있어 글을 작성하게 되었습니다.

 

@Aspect
@Slf4j
public class AspectV2 {


@Pointcut("execution(* hello.aop..*.*(..))")
public void allOrder(){}

// public java.lang.String hello.aop.order.OrderRepository.save(java.lang.String)
@Around("allOrder()")
public Object doLog1(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("[log] {}", joinPoint.getSignature());
return joinPoint.proceed();
}

@Around("allOrder()")
public Object doLog2(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("[log] {}", joinPoint.getSignature());
return joinPoint.proceed();
}

}

 

위의 코드에서 어드바이저는 총 몇개가 생기는지 궁금합니다.

 

@Aspect가 있는 빈이 생길 경우, AutoProxyCreator가 @Aspect를 읽고 어드바이저를 작성해서 @Aspect Advisor 빌더 내부에 저장해두는 것으로 알려주셨는데요...

 

위의 코드가 실행되면, 어드바이저는 2개가 되는 걸까요? 아니면 1개만 되는 걸까요? 제가 이해하기로는 어드바이저는 주로 Default Advisor를 사용해서 1포인트컷 + 1어드바이저로 구성된다고 이해를 해서 2개가 생길 것으로 생각되긴 한데...

 

항상 좋은 강의 및 답변 해주셔서 고맙습니다.

감사합니다! 

답변 1

답변을 작성해보세요.

0

안녕하세요. 안상혁님

하나의 애프펙트 안에 @Around를 통해서 여러 어드바이저를 구현한다 생각하시면 됩니다.

감사합니다.

안녕하세요, 영한님. 답글 감사드립니다

어스펙트 안에 여러 어드바이저가 생긴다면, 여러 어드바이저를 가진 어스펙트를 가진 하나의 프록시만 생성되는 것으로 이해하면 될까요? 

네 맞습니다. 그런데 어스펙트가 여러가지 여도 프록시는 하나만 생성됩니다. 그 안에 여러 어드바이저가 있겠지요^^