ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 어노테이션 기반 AOP
    SPRING 2021. 5. 26. 14:18

    개인 공부 후 정리 목적의 글입니다.

     

     

     

    어노테이션 사용을 위한 스프링 설정

     

    AOP를 어노테이션으로 설정하려면 스프링 설정 파일(xml)에 엘리먼트를 선언해야된다.

     

    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

     

    <aop:aspectj-autoproxy /> 엘리먼트를 선언하면 스프링 컨테이너는 AOP 관련 어노테이션들을 인식하고 용도에 맞게 처리해준다.

     

    AOP 관련 어노테이션들은 어드바이스 클래스에 설정한다.

    그리고 어드바이스 클래스에 선언된 어노테이션들을 스프링 컨테이너가 처리하게 하려면 어드바이스 객체가 생성되어 있어야 한다.

    즉, 어드바이스 클래스는 반드시 스프링 설정 파일에 <bean> 등록하거나 @Service 어노테이션을 사용하여 컴포넌트가 검색될 수 있도록 해야 된다.

    Annotation 설정 @Service
    public class LogAdvice { }
    XML 설정 <bean id="log" class="com.springbook.biz.common.LogAdvice"></bean>

     

     

    포인트컷 설정

     

    - XML 설정

    포인트컷을 선언할 때는 <aop:pointcut> 엘리먼트를 사용한다.

    그리고 선언된 여러 포인트컷을 식별하기 위한 유일한 아이디를 지정하며, 이후에 애스팩트 설정에서 특정 포인트컷을 참조할 수 있다.

     

    - 어노테이션 설정

    포인트컷을 선언할 때는 @Pointcut을 사용하며, 하나의 어드바이스 클래스 안에 여러 개의 포인트컷을 선언할 수 있다.

    여러 포인트컷을 식별하기 위한 식별자가 필요한데, 이때 참조 메소드를 이용한다.

     

     

    어드바이스 설정

    어드바이스 클래스에는 횡단 관심에 해당하는 어드바이스 메소드가 구현되어 있다.

    이 어드바이스 메소드가 언제 동작할지 결정하여 관련된 어노테이션을 메소드 위에 설정하면 된다.

    어드바이스의 동작 시점은 5가지가 제공된다.

    어노테이션 설명
    @Before 비즈니스 메소드 실행 전에 동작
    @AfterReturning 비즈니스 메소드가 성공적으로 리턴되면 동작
    @AfterThrowing 비즈니스 메소드 실행 중 예외가 발생하면 동작
    (마지 try ~ catch 블록에서 catch 블록에 해당)
    @After 비즈니스 메소드가 실행된 후, 무조건 실행
    (try ~ catch ~ finally 블록에서 finally 블록에 해당)
    @Around 호출 자체를 가로채 비즈니스 실행 전후에 처리할 로직을 삽입할 수 있음

     

     

    애스팩트 설정

    애스팩트는 @Aspect를 이용하여 설정한다.

    Aspect = Pointcut + Advice 이므로 애스팩트가 설정된 애스팩트 객체에는 반드시 포인트컷과 어드바이스를 결합하는 설정이 있어야 한다.

     

     

    Before 어드바이즈

    비즈니스 메소드가 실행되기 전에 공통으로 처리할 작업을 위해 사용한다. 

     

    After Returning 어드바이스

    비즈니스 메소드가 리턴한 결과 데이터를 다른 용도로 처리할 때 사용한다.

     

    After Throwing 어드바이스

    비즈니스 메소드 실행 도중에 예외가 발생했을 때, 공통적인 예외 처리 로직을 제공할 목적으로 사용하는 어드바이스이다.

     

    After 어드바이스

    예외 발생 여부에 상관없이 무조건 수행되는 어드바이스로서 @After 어노테이션을 사용하여 설정한다.

     

    Around 어드바이스 

    하나의 어드바이스로 사전, 사후 처리를 모두 해결하고자 할 때 사용하며, @Around 어노테이션을 사용하여 설정한다.

     

     

     

    'SPRING' 카테고리의 다른 글

    JoinPoint  (2) 2021.05.26
    어드바이스 동작 시점  (0) 2021.05.25
    AOP 용어  (0) 2021.05.25
    어노테이션  (0) 2021.05.24
    의존성 주입  (2) 2021.05.21
Designed by Tistory.