Aspect 설정에서 <aop:aspect> 태그는 한 개의 Aspect를 설정한다. <aop:aspect> 태그의 ref 속성에는 공통 기능을 구현하고 있는 빈을 전달한다.

<aop:config>

  <aop:aspect id="traceAspect" ref="performanceTraceAdvice">

    <aop:pointcut id="publicMethod" expression="execution(public * madvirus.spring.chap05..*(..))" />

    <aop:around pointcut-ref="publicMethod" method="trace" />

  </aop:aspect>

</aop:config> 

 

Advice를 적용할 Pointcut은 <aop:pointcut> 태그를 이용하여 설정한다. <aop:pointcut> 태그의 id 속성은 Pointcut을 구분하는 데 사용되는 식별 값을 입력 받고, expression 속성은 Pointcut을 정의하는 AspectJ의 표현식을 입력 받는다.

 

Advice를 표현하는 태그에는 <aop:around>를 비롯하여 각 타입의 Advice를 정의하기 위해 다음과 같은 태그를 제공한다.

 

※ Advice 정의 관련 태그 

 태     그

 설     명 

 <aop:before>  메서드 실행 전에 적용되는 Advice를 정의 

 <aop:after-returning>

 메서드가 정상적으로 실행된 후에 적용되는 Advice를 정의 
 <aop:after-throwing>  메서드가 예외를 발생시킬 때 적용되는 Advice를 정의한다. try~catch 블록에서 catch 블록과 비슷 
 <aop:after>  메서드가 정상적으로 실행되는지 또는 예외를 발생시키는지 여부에 상관없이 적용되는 Advice를 정의. try~catch~finally에서 finally 블록과 비슷 
 <aop:around>

 메서드 호출 이전, 이후, 예외 발생 등 모든 시점에 적용 가능한 Advice를 정의 

각 태그는 pointcut 속성 또는 pointcut-ref 속성을 사용하여 Advice가 적용될 Pointcut을 지정한다. pointcut-ref 속성은 <aop:pointcut> 태그를 이용하여 설정한 Pointcut을 참조할 때 사용되며, pointcut 속성은 직접 AspectJ 표현식을 이용하여 Pointcut을 지정할 때에 사용된다.

 

<aop:config>

  <aop:aspect id="traceAspect1" ref="performanceTraceAdvice">

    <aop:pointcut id="publicMethod" expression="execution(public * madvirus.spring.chap05.board..*(..))" />

    <aop:around pointcut-ref="publicMethod" method="trace" />

  </aop:aspect>

 

  <aop:aspect id="traceAspect2" ref="performanceTraceAdvice">

    <aop:around pointcut="execution(public * madvirus.spring.chap05.member..*(..))" method="trace" />

  </aop:aspect>

</aop:config> 

 

Advice의 각 태그는 Pointcut에 포함되는 대상 객체의 메서드가 호출될 때, <aop:aspect> 태그의 ref 속성으로 지정한 빈 객체에서 어떤 메서드를 실행할 지를 지정한다.

위 코드의 경우 madvirus.spring.chap05.member 패키지 및 그 하위 패키지의 public 메서드가 호출될 때 performanceTraceAdvice 빈의 trace 메서드가 호출되도록 설정하고 있다.

 

 

 

[참고자료] Spring 3.0 프로그래밍-최범균(p.154, 155)

+ Recent posts