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)
'프로그램 > Spring 3.0' 카테고리의 다른 글
Advice 타입 별 클래스 작성 <aop:before>, <aop:after-returning> (0) | 2012.05.03 |
---|---|
AOP 심플예제 (0) | 2012.05.03 |
AOP - XML 스키마 기반 (0) | 2012.05.01 |
AOP(Aspect Oriented Programming) (0) | 2012.04.30 |
라이프 사이클, @Scope, @Qualifier - 작성중... (0) | 2012.04.30 |