查询Spring Transaction配置和传播

时间:2012-01-25 09:16:09

标签: java spring transactions

在春季文档中写道

  

关于Spring Framework的声明式事务要掌握的最重要的概念   支持是通过AOP代理启用此支持,并且事务性建议由   元数据(目前基于XML或注释)。

所以,如果我使用

<tx:annotation-driven proxy-target-class="true" order="100"/>

在配置文件中,而不是在我的bean上使用@Transactional注释。是否仍然支持事务,因为我使用AOP并且事务拦截器应该内置到我的AOP中,因此不使用显式使用@Transactional注释。

谢谢,

2 个答案:

答案 0 :(得分:3)

不,你仍然需要使用@Transactional注释。 AOP代理仅用于将与事务相关的代码注入到代码中。

答案 1 :(得分:1)

  1. &LT; tx:注释驱动/&gt;用于自动检测'@Transactional'注释。因此必须有一个。参考here

  2. proxy-target-class =“true”决定Spring是否应该使用JDK动态代理或基于CGLIB类的代理。有关详细信息,请参阅reference。基本上,如果您的类实现至少一个接口,则使用JDK动态代理。如果您有一个类MyDaoImpl扩展MyDao并且在您的服务中,您通过MyDaoImpl myDaoImpl注入dao引用,如果注释在您的接口上,JDK动态代理将无法工作,因为类basebase代理是使用proxy-target-class =“true创建的“和@Transactional注释不是继承的。

  3. 您的查询似乎在没有@Transactional的情况下工作的原因可能是因为您正在使用hibernate模板在内部打开和关闭事务。从Spring 3开始,建议直接注入sessionFactory而不是使用hibernate模板。

  4. 希望这有帮助。