2017-02-27 4180 views
0

Spring AOP适用于通过接口公开的方法。 Spring AOP通过目标类提供代理选项@EnableAspectJAutoProxy(proxyTargetClass = true)使用Spring AOP进行嵌套方法调用proxyTargetClass = true

在这种情况下,目标类是代理,所以我假设它的所有方法 - public,protected和private。

interface ISample { 
     public method1(); 
    } 

class Sample implements ISample { 
    @LogMe 
    public method1() { 
    ... 
    method2(); 
    } 

    @LogMe 
    private method2() { 
    ... 
    } 
} 

我在类路径配置CGLIB库,该配置类具有@EnableAspectJAutoProxy(proxyTargetClass =真),纵横类有@Aspect和@Component。如果使用@LogMe注释,则方面类将记录所有方法调用。

问题是用这个设置method2()调用不会被记录?如果代理人在目标课堂上,不应该这样工作吗?

+1

CGLIB代理作品[子类](http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop-api .html#aop-api-proxying-class)目标。由于'method2()'具有'private'访问修饰符,因此它不能被覆盖,因此不能被代理;这是你观察到的。此外,'method2()'是内联调用的,而不是通过可以被拦截的spring管理bean调用的。 –

+0

@ Bond-JavaBond谢谢!春季文档的解释清楚表明。有建议的链接,我可以参考加载时间使用spring编织aspectj?通过将EnableLoadTimeWeaving和EnableSpringConfigured添加到配置文件并使用spring-instruments jar启动服务器,基本配置的编织似乎不起作用。一套工作步骤对参考很有帮助。 –

+0

请编译面临的问题,因为新的帖子/问题..将很乐意帮助:) –

回答

相关问题