본문 바로가기
Spring/Advanced

@Aspect AOP

by JHyun0302 2023. 8. 21.
728x90

@Aspect 프록시 - 적용

 

 

프록시 적용하려면 (Advisor)를 만들어서 스프링 빈으로 등록하면 된다.

@Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원

 

 

 

 

 

LogTraceAspect

@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("execution(* hello.proxy.app..*(..))")
        @Around 의 값에 포인트컷 표현식을 넣는다. 표현식은 AspectJ 표현식을 사용한다.
        @Around 의 메서드는 어드바이스( Advice )가 된다.
  • ProceedingJoinPoint joinPoint : 어드바이스에서 살펴본 MethodInvocation invocation 과 유사. 내부에 실제 호출 대상, 전달 인자, 그리고 어떤 객체와 어떤 메서드가 호출되었는지 정보가 포함되어 있다.
  • joinPoint.proceed() : 실제 호출 대상( target )을 호출한다.

 

 

 

 

 

 

AopConfig

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

 

  1. @Bean logTraceAspect() : @Aspect 가 있어도 스프링 빈으로 등록을 해야 한다.
  2. LogTraceAspect@Component 써서 스프링 빈으로 등록해도 된다.

 

 

 

 

 

 

 

 

 


@Aspect 프록시 - 설명

 

 

 

 

 

 

※ 자동 프록시 생성기

1. @Aspect 를 보고 어드바이저( Advisor )로 변환해서 저장한다.

2. 어드바이저를 기반으로 프록시를 생성한다.

 

 

 

 

 

 

 

 

 

 


정리

 

 

애플리케이션의 여러 기능들 사이에 걸쳐서 들어가는 관심사를 횡단 관심사(cross-cutting concerns)라고 한다.

 

 

 

 

 

반응형

'Spring > Advanced' 카테고리의 다른 글

스프링 AOP 구현  (0) 2023.08.21
스프링 AOP 개념  (0) 2023.08.21
빈 후처리기  (0) 2023.08.17
스프링이 지원하는 프록시  (0) 2023.08.17
동적 프록시 기술  (0) 2023.08.16