ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AOP(execution)
    Spring 2020. 1. 27. 19:20

    사용자는 시스템을 사용하면서 자연스럽게 비즈니스 컴포넌트의 여러 Joinpoint를 호출하게 된다. 이때 특정  Pointcut으로 지정한 메소드가 호출되는 순간, 어드바이스 객체의 어드바이스 메소드가 실행.

     

    어드바이스 메소드의 동작시점은 5가지로 지정 가능( Before,After,After-Returning,After-Throwing,Around),

    포인트컷으로 지정한 메소드가 호출될 때, 어드바이스 메소드를 삽입하도록 하는 설정을 Aspect 라고 한다.

    이 Aspect 설정에 따라 위빙이 처리된다.

     

    <aop:config> : AOP 설정의 루트 엘리먼트, 여러번 사용가능 , 하위에는 <aop:pointcut> <aop:aspect> 엘리먼트 위치할수있다.

     

    <aop:pointcut>엘리먼트는 포인트컷 지정을 위해 사용, aop:config의 자식이나 aop:aspect의 자식 엘리먼트로 사용가능,

    그러나 aop:aspect 하위에 설정된 포인트컷의 경우 해당 aop:aspect에서만 사용가능.

     

    <aop:aspect> : 핵심 관심에 해당하는 포인트컷 메소드와 횡단 관심에 해당하는 어드바이스 메소드를 결합하기 위해 사용한다.

     

    <aop:advisor> : 포인트컷과 어드바이스를 결합한다는 점에서 aop:aspect 와 같은 기능. 하지만, 트랜잭션 같은 몇몇 특수한 경우는 애스팩트가 아닌 어드바이저를 사용해야 한다.

     

    AOP 설정에서 애스팩트를 사용하려면 어드바이스의 아이디와 메소드 이름을 알아야 한다. 

    만약 어드바이스 객체의  아이디를 모르거나 메소드 이름을 확인할 수 없을 때는 애스팩트를 설정할 수 없다.

    <tx:advice id="txAdvice" transaction-manager="txManager">

     <tx:attributes>

       <tx:method name="get*" raead-only="true">

    </tx:attributes>

     

    <aop:config>

      <aop:pointcut id="allPointcut" expression="execution(* com.springbook.biz..*Impl.*(..))"

      <aop:advisor pointcut="allPointcut" advice-ref="txAdvice"/>

    </aop:config>

     

     

     

     

    포인트컷 표현식

     
      execution(리턴타입 / 패키지경로 / 클래스명 / 메소드명 매개변수 )
      execution(*           /com.springbook.biz../*Impl/.*(..))

     

    리턴타임

    * : 모든 리턴타입 허용

    void :  리턴타입이  void인 메소드 선택

    !void  : 리턴타입이 void가 아닌 메소드 선택

     

    패키지경로 

    com.springbook.biz : 정확하게 이 패키지만 선택

    com.springbook.biz.. : com.springbook.biz 로 시작하는 모든 패키지

    com.springbook.biz..impl : com.springbook.biz로 시작하면서 impl로 끝나는 패키지 선택

     

    클래스 지정 

     

    BoardServiceImpl : 정확하게 이 클래스만 선택

    *Impl : 클래스 이름이 Impl 로 끝나는 클래스만 선택

    BoardService+ : 클래스 이름 뒤에 '+'가 붙으면 해당 클래스로부터 파생된 모든 자식클래스선택

                         인터페이스의 경우 해당 인터페이스를 구현한 모든 클래스 선택 

     

    메소드 지정 (메소드를 지정할떄 주로 '*',매개변수를 지정할 때는 '..')

    *(..) : 가장 기본 설정으로 모든 메소드 선택

    get*(..) : 메소드 이름이 getㅇ로 시작하는 모든 메소드 선택

     

     

    매개변수 지정

    (..) : 가장 기본 설정으로 매개변수의 개수와 타입에 제약이 없음을 의미.

    (*) : 반드시 1개의 매개변수를 가지는 메소드만 선택 

    (com.springbook.user.UserVO): 매개변수로 UserVO를 가지는 메소드만 선택.이때 클래스의 패키지 경로가 반드시 포함되어야함. 

    (!com.springbook.user.UserVO) :매개변수로 UserVO를 가지지 않는 메소드만 선택

    (Integer, ..) 한개 이상의 매개변수를 가지되, 첫번째 매개변수의 타입이 Integer인 메소드만 선택

    (integer, *) : 반드시 두개의 매개변수를 가지되,첫번째 매개변수 타입이 Integer인 메소드만 선택

     

     

     

     

    'Spring' 카테고리의 다른 글

    After Returning ,After Throwing ,Around  (0) 2020.01.28
    JoinPoint  (0) 2020.01.28
    AOP  (0) 2020.01.27
    Spring Annotation  (0) 2020.01.22
    Spring Setter  (0) 2020.01.22
Designed by Tistory.