Spring aop拦截来自同一服务类的调用

Aja*_*jay 5 java aop spring spring-aop java-ee

我有一个与上面提到的相同的场景

Spring @Transaction方法调用同一个类中的方法,不起作用?

我指的是答案#1,我认为这对我的简单pojo类有效,但它没有.在我的情况下,我没有注释@Transaction.它是一个简单的pojo类.如果我在上面的帖子中举例,我希望拦截每个方法adduser以及使用spring aop的addusers.

是否有可能拦截从同一服务调用中调用的方法?我指的是AspectJAwareProxy,它可以解决问题,但并不能解决整个问题.我的意思是我不希望任何东西被添加到我的业务逻辑中.所以我想避免任何编码,除了定义切入点和定义建议.是否有可能使用Java和spring aop?我正在使用CGlib来生成代理.Spring版本是3.0.5.请.

谢谢,Ajay

pap*_*pap 1

为此,您必须使用加载时编织而不是代理。原因是因为spring使用代理来实现AOP功能(比如事务支持)。一旦进入类实例,对同一实例中方法的任何方法调用都将直接针对实际实例对象,而不是包装代理,因此不会考虑 AOP 建议。加载时编织的工作方式有所不同。在那里,您有一个外部 java 代理,可以在字节码级别上操作类以注入 AOP 支持。

您将需要

1: 修改您的java命令行以包含springaspectj代理

2:添加

<context:load-time-weaver aspectj-weaving="on" />
<tx:annotation-driven mode="aspectj" />
Run Code Online (Sandbox Code Playgroud)

到你的弹簧配置。

阅读更多:

使用 Spring 事务管理器和 Maven 进行 AspectJ 加载时间编织

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-aj-ltw