ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] @Aspect - AOP
    Spring 2022. 6. 19. 23:53

    이전에 공부 하였듯이 자동 프록시 생성기를 통해

    스프링 빈에 등록된 Advisor를 스프링이 자동으로 조회하여

    해당 Advisor의 Pointcut을 통해 적용 되는 클래스, 메서드를 조회하고

    Advice가 적용되어야하는 메서드를 확인한 다음 Advice가 실행되었다.

     

    스프링은 @Aspect 애너테이션을 통해 포인트 컷과 어드바이스로 구성되어 있는

    어드바이스를 생성하는 기능을 지원한다.

     

    @Aspect 애너테이션이란?

    AOP(관점 지향 프로그래밍)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애너테이션.

     

    @Aspect
    public class MyAdvisor {
    
    @Around("execution(* 패키지이름..*(..))")
    	public Object execution(ProceedingJoinPoint joinPoint) throws Throwable {
    		/*
            Advice 실행 내용 작성
            joinPoint.getSignature().toShortString(); // 클래스.메서드 이름을 가져오기
            joinPoint.getTarget(); // 실제 호출 대상
            joinPoint.getArgs(); // 전달되는 인자
            joinPoint.getSignature() // join point 시그니처
            
            joinPoint.proceed(); // 실제 호출 대상 target을 호출한다.
            */
    	}
    
    }

    @Aspect : 애너테이션 기반 프록시를 적용할 때 작성

    (해당 애너테이션이 붙은 클래스가 Advisor가 되는 것)

     

    @Around("execution(aspectJ 표현식 작성)") : 포인트컷 표현식 작성

    (Advisor의 Pointcut이 된다.)

     

    @Around 가 붙은 메서드 : 해당 Advisor의 Advice가 된다.

     

    ProceedingJoinPoint : Advice의 MethodInvocation과 유사한 기능

    (실제 호출 대상, 전달 인자, 어떤 객체와 메서드가 호출 되었는지에대한 정보가 포함됨)

     

     

    @Aspect 애너테이션으로 Advisor를 쉽게 만들어 주었으나 해당 Advisor를

    스프링 빈으로 등록해줘야한다. @Configuration 안에 @Bean을 통해 스프링 빈으로 등록해도 되고

    컴포넌트 스캔을 사용해서(@Component) 스프링 빈으로 등록해도 된다.

     

     

    빈 후처리기에서 학습했던 자동 프록시 생성기의 기능은

    스프링 빈으로 등록된 Advisor를 자동으로 찾아서 프록시 생성 및 적용을 해준다고 배웠는데

    @Aspect 애너테이션을 찾아서 이를 Advisor로 만들어주는 역할도 가지고 있다.

     

    즉 자동 프록시 생성기의 기능은

    1. @Aspect 애너테이션을 보고 Advisor로 변환해서 저장한다.

    2. Advisor를 기반으로 프록시를 생성한다.

     

     

    @Aspect의 애너테이션 기반 프록시는 편리하기 때문에 실무에서 대부분 이 방식을 사용한다.

    Advisor를 통해 여러 기능들에 특정 관심사를 실행시키는 것을

    횡단 관심사를 해결하는 것이다..

     

    [참고 : 인프런 - 스프링 핵심 원리 - 고급편]

Designed by Tistory.