使用cglib代理在Spring AOP中无法使用日志记录

时间:2014-09-11 15:10:48

标签: java spring logging aop

我使用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>

0 个答案:

没有答案
相关问题