我使用spring AOP进行日志记录,从我的服务层,我正在调用具体类的DAO类的方法,并在服务中引用这个具体类。 cany创建dao的接口,因此使用cglib代理创建代理。这是我的服务类:
@Service("depositRegisterService")
public class DepositRegisterService extends BaseBusinessService
{
@Autowired
@Qualifier("depositRegisterDAO")
private DepositRegisterDAO depRegDAO;..}
和dao类是:
@Repository("depositRegisterDAO")
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS )
public class DepositRegisterDAO extends BaseDAO
{ ..}
我已正确完成所有配置。当我执行应用程序时,日志不会出现,也没有得到任何异常。我已经debbuged,我可以看到生成的代理。
com.efilms.server.dao.DepositRegisterDAO.getDepositRegisterList(DepositRegisterDAO.java:236)
at com.efilms.server.dao.DepositRegisterDAO$$FastClassByCGLIB$$7ef8f01.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at com.efilms.server.dao.DepositRegisterDAO$$EnhancerByCGLIB$$91273fc3.getDepositRegisterList(<generated>)
at com.efilms.server.service.DepositRegisterService.processService(DepositRegisterService.java:238)
无法理解为什么没有记录日志。
我在创建演示并跟踪调用后进行了检查,就像这样:
at com.byteslounge.spring.service.ExampleService.simpleMethod(ExampleService.java:13)
at com.byteslounge.spring.service.ExampleService$$FastClassByCGLIB$$a95c2c6f.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
at com.byteslounge.spring.service.ExampleService$$EnhancerByCGLIB$$5695f26a.simpleMethod(<generated>)
经过比较,我开始了解
的不同之处at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
这个电话没有发生。 请帮我解决这个问题。
由kriegaex编辑: AOP配置,从Abishek的评论中复制并格式化:
<aop:config proxy-target-class="true" />
<context:component-scan base-package="com.*"/>
<context:load-time-weaver/>
<bean id="logAspect" class="com.efilms.server.infra.LoggingAspect"/>
<aop:config>
<aop:aspect id="myAspect" ref="logAspect">
<aop:pointcut id="businessService" expression="within(com.efilms.server.dao.*)"/>
<aop:before pointcut-ref="businessService" method="logBefore"/>
<aop:after-throwing pointcut-ref="businessService" throwing="error" method="logAfterThrowing"/>
</aop:aspect>
</aop:config>