※ 하나의 JoinPoint에 한 개 이상의 Advice가 적용될 경우, 순서를 명시적으로 지정할 수 있음
지정방법
▶ org.springframework.core.annotation.Order 어노테이션을 적용
▶ org.springframework.core.Ordered 인터페이스를 구현
■ @Order 어노테이션을 이용하는 방법
NoticeBoardImpl.java
package sp.aop.service; import org.springframework.stereotype.Component;
@Component("noticeBoard") @Override @Override |
BoardController.java
package sp.aop.controller; import javax.annotation.Resource; import org.springframework.web.servlet.ModelAndView; import sp.aop.service.Board;
public class BoardController extends
@Resource(name="noticeBoard") } |
TestAspect.java
package sp.aop.aspect; import org.aspectj.lang.JoinPoint;
@Pointcut("execution(* sp.aop.service.*.get*())") |
LogAspect.java
package sp.aop.aspect; import org.aspectj.lang.ProceedingJoinPoint;
@Aspect
@Pointcut("execution(public * sp.aop.service.*.get*(..))") |
spring302-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
<context:annotation-config/> |
결과 => LogAspect : Order(2), TestAspect : Order(1)
<<===== START =====>> |
결과 => LogAspect : Order(1), TestAspect : Order(2)
<<===== START =====>> |
● 적용 순서 값이 낮은 Advice의 우선 순위가 더 높다. 순서 값이 1인 Advice가 순서 값인 2인 Advice보다 우선 순위가 높다. 메서드 호출 전, 메서드 호출에 대해서느 우선 순위가 높은 Advice가 먼저 실행되고, 메서드 호출 후에 대해서는 우선 순위가 낮은 Advice가 먼저 실행
■ XML 스키마를 사용할 경우 <aop:asect> 태그의 order 속성을 사용
<aop:config> |
[참고자료] Spring 3.0 프로그래밍-최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
스프링 MVC의 처리 흐름 - 간단 예제 (0) | 2012.05.13 |
---|---|
스프링 MVC 주요 구성 요소 (2) | 2012.05.13 |
Pointcut의 조합 (0) | 2012.05.12 |
AspectJ의 Pointcut 표현식 (0) | 2012.05.12 |
JoinPoint의 사용 (0) | 2012.05.11 |