Spring doc有两个建议:
Spring建议您只注释具体的类(和方法) 带有@Transactional注释的具体类),而不是 注释接口。你当然可以放置@Transactional 接口(或接口方法)上的注释,但这是有效的 只有在你使用基于接口的情况下才会如你所愿 代理。 Java注释不是从中继承的事实 接口意味着如果您使用基于类的代理 (proxy-target-class =“true”)或基于编织的方面 (mode =“aspectj”),然后无法识别事务设置 代理和编织基础设施,而对象不会 包含在事务代理中,这将是非常糟糕的。
(来自http://static.springsource.org/spring/docs/3.0.x/reference/transaction.html)
和
Spring AOP使用JDK动态代理或CGLIB来创建 给定目标对象的代理。 (JDK动态代理是首选 只要你有选择)。
(来自http://static.springsource.org/spring/docs/3.0.x/reference/aop.html#aop-understanding-aop-proxies)
我是否正确理解为了遵循这两个建议,我需要对具体类进行@Transactional
注释,但仍提供包含所有事务方法的接口(这个类实现),以便Spring可以使用这个接口的JDK dynamix代理?
答案 0 :(得分:2)
它像这样工作
拥有方法的业务接口,不要使用@Transactional
为上面定义的接口编写实现类,并使用@Transactional
由于Spring建议使用基于接口的JDK动态代理,因此我们需要有适当的业务接口。 另外,如上所述
Java注释不是从接口继承的
我们需要使用@Transactional