在春季文档中写道
关于Spring Framework的声明式事务要掌握的最重要的概念 支持是通过AOP代理启用此支持,并且事务性建议由 元数据(目前基于XML或注释)。
所以,如果我使用
<tx:annotation-driven proxy-target-class="true" order="100"/>
在配置文件中,而不是在我的bean上使用@Transactional
注释。是否仍然支持事务,因为我使用AOP并且事务拦截器应该内置到我的AOP中,因此不使用显式使用@Transactional
注释。
谢谢,
答案 0 :(得分:3)
不,你仍然需要使用@Transactional
注释。 AOP代理仅用于将与事务相关的代码注入到代码中。
答案 1 :(得分:1)
&LT; tx:注释驱动/&gt;用于自动检测'@Transactional'注释。因此必须有一个。参考here。
proxy-target-class =“true”决定Spring是否应该使用JDK动态代理或基于CGLIB类的代理。有关详细信息,请参阅reference。基本上,如果您的类实现至少一个接口,则使用JDK动态代理。如果您有一个类MyDaoImpl扩展MyDao并且在您的服务中,您通过MyDaoImpl myDaoImpl注入dao引用,如果注释在您的接口上,JDK动态代理将无法工作,因为类basebase代理是使用proxy-target-class =“true创建的“和@Transactional注释不是继承的。
您的查询似乎在没有@Transactional的情况下工作的原因可能是因为您正在使用hibernate模板在内部打开和关闭事务。从Spring 3开始,建议直接注入sessionFactory而不是使用hibernate模板。
希望这有帮助。