Controller 에 AOP - interceptor 적용이 안됨
- 작성자 :
- 이*수
- 작성일 :
- 2010-03-22 15:03:24
- 조회수 :
- 3,982
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
아래 질문 답변에 대해 다시 질문 드립니다.
제 질문은 aop:pointcut 부분의 expression를 수정해도 안된다는 얘기였습니다.
++++++++++++++++++++++++++++++++++++++++++++++
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("========================================");
}
}
===============================================================================
제 질문은 aop:pointcut 부분의 expression를 수정해도 안된다는 얘기였습니다.
++++++++++++++++++++++++++++++++++++++++++++++
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("========================================");
}
}
===============================================================================
A
안녕하세요.. 이필수님..
Controller 처리 부분에 대해서는 proxy 처리 방식에 따라 AOP가 적용되지 않는 경우가 있는 것 같습니다.
(Spring 3.0부터는 잘 적용된다고 하나 현재 전자정부 표준프레임워크의 경우 2.5 기반으로 적용 불가)
따라서 Aspect 부분을 서비스 부분으로 이동하거나 Spring AOP가 아닌 AspectJ를 적용하셔야 할 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
Controller 처리 부분에 대해서는 proxy 처리 방식에 따라 AOP가 적용되지 않는 경우가 있는 것 같습니다.
(Spring 3.0부터는 잘 적용된다고 하나 현재 전자정부 표준프레임워크의 경우 2.5 기반으로 적용 불가)
따라서 Aspect 부분을 서비스 부분으로 이동하거나 Spring AOP가 아닌 AspectJ를 적용하셔야 할 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.