java–Spring @Transactional既作为动态Jdk代理又作为aspectj方面应用

java–Spring @Transactional既作为动态Jdk代理又作为aspectj方面应用,第1张

概述我正在通过@Transactional注释向现有Java项目添加Spring声明性事务.当我遇到问题(与此问题无关)时,我打开了完整的调试日志记录.奇怪的是,我注意到以下几点: 17:47:27,834 DEBUG HibernateTransactionManager:437 - Found thread-bound Session [org.hibern

我正在通过@Transactional注释向现有Java项目添加Spring声明性事务.

当我遇到问题(与此问题无关)时,我打开了完整的调试日志记录.奇怪的是,我注意到以下几点:

17:47:27,834 DEBUG HibernateTransactionManager:437 - Found thread-bound Session [org.hibernate.impl.SessionImpl@10ed8a8e] for Hibernate transaction17:47:27,845 DEBUG HibernateTransactionManager:470 - Participating in existing transaction17:47:27,865 DEBUG AnnotationTransactionAttributeSource:106 - Adding transactional method 'updateUserProfile' with attribute: PROPAGATION_required,ISolATION_DEFAulT; ''17:47:27,875 DEBUG AnnotationTransactionAspect:321 - SkipPing transactional joinpoint [se.myservice.UserService.updateUserProfile] because no transaction manager has been configured

经过一些调试后,我发现前三个日志条目,它说它找到一个线程绑定会话并使用该事务,由我的UserService类上的JdkDynamicAopProxy生成.

最后一条日志消息看起来很惊人.它在方法执行之前在连接点调用.查看AnnotationTransactionAspect的源时,如果未设置事务管理器,则会生成此消息.在这种情况下,因为Spring从不在这方面执行任何依赖注入.

在我看来,两种不同的“风格”交易都适用:动态代理和方面.我唯一与事务相关的配置是:

我们在项目中使用了AspectJ,但是在我的aop.xml中没有注册AnnotationTransactionAspect方面.我们正在使用Spring 3.0.2.RELEASE.

我应该对此感到震惊吗? Spring会为我注册这方面吗?使用AspectJ时我不应该使用注释驱动吗?

最佳答案很奇怪,听起来你有这样的配置:

(使用AspectJ的事务支持,而不是JDK代理)

由于您的配置没有mode属性,因此默认情况应该启动(代理模式).但是AnnotationTransactionAspect是aspectj模式使用的确切方面.

总结

以上是内存溢出为你收集整理的java – Spring @Transactional既作为动态Jdk代理又作为aspectj方面应用全部内容,希望文章能够帮你解决java – Spring @Transactional既作为动态Jdk代理又作为aspectj方面应用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1265861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)