aop 적용 관련 질문입니다.
- 작성자 :
- 김*훈
- 작성일 :
- 2013-05-22 16:58:27
- 조회수 :
- 1,635
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요.
aop 관련 질문이 있습니다.
공통 콤포넌트를 사용하려고 하는데 dao에 aop 를 적용하려고 합니다.
다음과 같이 설정하고
<aop:aspect ref="test.daoLogger">
<aop:pointcut id="test.daoMethod"
expression="execution(* egovframework..*DAO.*(..))" />
<aop:after pointcut-ref="test.daoMethod" method="logging" />
</aop:aspect>
<bean id="test.daoLogger" class="test.com.utl.aop.Log4jAspectJ" />
서버를 실행하면
Error creating bean with name 'EgovCmmUseService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'cmmUseDAO' must be of type [egovframework.com.cmm.service.impl.CmmUseDAO], but was actually of type [$Proxy9]
위와 같은 오류가 납니다.
해결책이 있을까요?
수고하세요.
aop 관련 질문이 있습니다.
공통 콤포넌트를 사용하려고 하는데 dao에 aop 를 적용하려고 합니다.
다음과 같이 설정하고
<aop:aspect ref="test.daoLogger">
<aop:pointcut id="test.daoMethod"
expression="execution(* egovframework..*DAO.*(..))" />
<aop:after pointcut-ref="test.daoMethod" method="logging" />
</aop:aspect>
<bean id="test.daoLogger" class="test.com.utl.aop.Log4jAspectJ" />
서버를 실행하면
Error creating bean with name 'EgovCmmUseService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'cmmUseDAO' must be of type [egovframework.com.cmm.service.impl.CmmUseDAO], but was actually of type [$Proxy9]
위와 같은 오류가 납니다.
해결책이 있을까요?
수고하세요.
A
안녕하세요. 김경훈님.
Spring의 AOP는 proxy 방식이기 때문에 원칙적으로 pointcut에 정의되는 부분은 interface로 정의되어야 합니다.
그러나 <aop:config /> 속성으로 proxy-target-class="true"로 설정을 하시면
class 기반의 proxy 생성이 가능합니다.
추가로 이 경우에는 CGLIB라는 library가 필요하기 때문에 pom.xml 상에 다음과 같은 dependency를 추가하셔야 하구요.
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
그럼, 즐거운 하루되십시오.
감사합니다.
Spring의 AOP는 proxy 방식이기 때문에 원칙적으로 pointcut에 정의되는 부분은 interface로 정의되어야 합니다.
그러나 <aop:config /> 속성으로 proxy-target-class="true"로 설정을 하시면
class 기반의 proxy 생성이 가능합니다.
추가로 이 경우에는 CGLIB라는 library가 필요하기 때문에 pom.xml 상에 다음과 같은 dependency를 추가하셔야 하구요.
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
그럼, 즐거운 하루되십시오.
감사합니다.