Controller 에 AOP - interceptor 적용이 안됩니다.
- 작성자 :
- 이*수
- 작성일 :
- 2010-03-19 17:14:56
- 조회수 :
- 3,930
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
point-cut execution에 설정 @Service는 Interceptor가 잘 먹히는데 @Controller 패키지를 point-cut execution을 설정하면 안먹힙니다.
@Controller의 메소드에 aop Interceptor를 사용하려면 아래 외에 다른 설정이 필요한 지 알려주시면 좋겠습니다.
또한, @Controller에 설정이 불가능하다면 그 이유가 무엇 때문인지도 궁금합니다.
감사합니다. 수고하세요
1. [context-aop.xml]
----------------------------------------------------------------------------
<bean id="aopInterceptorTest" class="egovframework.rte.cmmn.AopTest" />
<aop:config>
<aop:pointcut id="targetMethod" expression="execution(* egovframework.rte.sample..impl.*Impl.*(..))" />
</aop:config>
<aop:config>
<aop:aspect ref="aopInterceptorTest">
<aop:before pointcut-ref="targetMethod" method="beforeTargetMethod" />
<aop:after-returning pointcut-ref="targetMethod" method="afterReturningTargetMethod" returning="retVal" />
</aop:aspect>
</aop:config>
===================================================================================
2. egovframework.rte.cmmn.AopTest.java
----------------------------------------------------------------------------------
package egovframework.rte.cmmn;
import org.aspectj.lang.JoinPoint;
public class AopTest {
public void beforeTargetMethod(JoinPoint thisJoinPoint) {
System.out.println("AopTest.beforeTargetMethod executed.");
Class clazz = thisJoinPoint.getTarget().getClass();
String className = thisJoinPoint.getTarget().getClass().getSimpleName();
String methodName = thisJoinPoint.getSignature().getName();
System.out.println(className + "." + methodName + " executed.");
System.out.println("========================================");
}
public void afterReturningTargetMethod(JoinPoint thisJoinPoint, Object retVal) {
System.out.println("AopTest.afterReturningTargetMethod executed.");
System.out.println(" return value is [" + retVal + "]");
System.out.println("========================================");
}
}
===============================================================================
@Controller의 메소드에 aop Interceptor를 사용하려면 아래 외에 다른 설정이 필요한 지 알려주시면 좋겠습니다.
또한, @Controller에 설정이 불가능하다면 그 이유가 무엇 때문인지도 궁금합니다.
감사합니다. 수고하세요
1. [context-aop.xml]
----------------------------------------------------------------------------
<bean id="aopInterceptorTest" class="egovframework.rte.cmmn.AopTest" />
<aop:config>
<aop:pointcut id="targetMethod" expression="execution(* egovframework.rte.sample..impl.*Impl.*(..))" />
</aop:config>
<aop:config>
<aop:aspect ref="aopInterceptorTest">
<aop:before pointcut-ref="targetMethod" method="beforeTargetMethod" />
<aop:after-returning pointcut-ref="targetMethod" method="afterReturningTargetMethod" returning="retVal" />
</aop:aspect>
</aop:config>
===================================================================================
2. egovframework.rte.cmmn.AopTest.java
----------------------------------------------------------------------------------
package egovframework.rte.cmmn;
import org.aspectj.lang.JoinPoint;
public class AopTest {
public void beforeTargetMethod(JoinPoint thisJoinPoint) {
System.out.println("AopTest.beforeTargetMethod executed.");
Class clazz = thisJoinPoint.getTarget().getClass();
String className = thisJoinPoint.getTarget().getClass().getSimpleName();
String methodName = thisJoinPoint.getSignature().getName();
System.out.println(className + "." + methodName + " executed.");
System.out.println("========================================");
}
public void afterReturningTargetMethod(JoinPoint thisJoinPoint, Object retVal) {
System.out.println("AopTest.afterReturningTargetMethod executed.");
System.out.println(" return value is [" + retVal + "]");
System.out.println("========================================");
}
}
===============================================================================
A
안녕하세요.. 이필수님..
AOP 정의 상 egovframework.rte.sample..impl.*Impl 패키지에 속한 클래스만 대상이 되도록 되어 있어서 그런 것 같습니다.
Annotation(@Service, @Controller)를 통해 구분되지 않고 패키지 및 클래스명으로 pointcut이 작성되어 있습니다.
aop:pointcut 부분의 expression를 수정하시면 됩니다.
참고할 저희 쪽 가이드 부분은 다음과 같습니다.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:fdl:aop
그럼.. 즐거운 하루되십시오.
감사합니다.
AOP 정의 상 egovframework.rte.sample..impl.*Impl 패키지에 속한 클래스만 대상이 되도록 되어 있어서 그런 것 같습니다.
Annotation(@Service, @Controller)를 통해 구분되지 않고 패키지 및 클래스명으로 pointcut이 작성되어 있습니다.
aop:pointcut 부분의 expression를 수정하시면 됩니다.
참고할 저희 쪽 가이드 부분은 다음과 같습니다.
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:fdl:aop
그럼.. 즐거운 하루되십시오.
감사합니다.