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 代理?