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

发布于 2024-12-03 19:56:47 字数 548 浏览 2 评论 0原文

我有一个与

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

我指的是答案#1,我认为它适用于我的简单 pojo 类,但事实并非如此。就我而言,我没有注释@Transaction。它是一个简单的 pojo 类。如果我在上面的帖子中举个例子,我希望使用 spring aop 拦截每个方法 adduser 和 addusers 。

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

谢谢, 阿杰

I have a same scenario as mentioned in

Spring @Transaction method call by the method within the same class, does not work?

I was referring to answer #1 which i thought would work for my simple pojo class but it didnt. In my case i dont have annotation @Transaction. Its a simple pojo class. I wish to intercept each method adduser as well as addusers using spring aop if i take example in post above.

Is it possible to intercept method that is being called from the same service call? I was referring to AspectJAwareProxy which does the trick but doesnt resolve the issue as a whole. What i mean is i dont want anything to be added to my business logic. So i want to avoid any coding except for defining pointcut and defining the advice. Is it something possible using Java and spring aop? I am using CGlib to generate proxy. Spring version is 3.0.5.Release.

Thanks,
Ajay

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朕就是辣么酷 2024-12-10 19:56:48

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

您将需要

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

2: 添加

<context:load-time-weaver aspectj-weaving="on" />
<tx:annotation-driven mode="aspectj" />

到您的 spring cofig。

阅读更多:

AspectJ 加载时间编织与 Spring 事务管理器和Maven

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

For this to work, you have to use load-time weaving instead of proxying. The reason is because spring uses proxying to achieve AOP functionality (such as transaction support). Once inside a class instance, any method-calls to methods in the same instance will be directly against the actual instance object, not the wrapping proxy so AOP advices will not be considered. Load-time weaving works differently. There, you have an outside java agent that manipulates the classes on a byte-code level to inject the AOP support.

You will need to

1: Modify your java command-line used to include the spring aspectj agent

2: add

<context:load-time-weaver aspectj-weaving="on" />
<tx:annotation-driven mode="aspectj" />

to your spring cofig.

Read more:

AspectJ Load Time Weaving with Spring Transaction Manager and Maven

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文