【发布时间】:2013-12-25 23:48:09
【问题描述】:
Spring 文档建议不要将@Transactional 注解放在接口方法上,因为接口注解不会被类继承。但是,使用 Java 8,我们可以在接口中提供具体的默认实现。如果这样一个默认的接口方法需要作为事务边界,我们别无选择:我们必须在接口方法上加上@Transactional注解。
这会起作用吗(即在这种情况下,spring 会尊重事务边界)吗?如果是这样,这种方法是否有任何隐藏的陷阱?
【问题讨论】:
-
如果你需要一个方法的默认实现,为什么不创建一个抽象类而不是一个接口呢? Java 8 API 文档让我相信接口默认方法主要是为了允许向接口添加新方法,而不会破坏该接口的旧实现。
-
接口默认方法允许您创建mixins,这是一个比传统java接口更强大的编程结构。是否有正当理由在事务接口中使用 mixin 是另一个问题,但这并非不可想象。使用抽象类也可以,但会将您限制在线性对象层次结构中。 Mixin 更加灵活。
标签: java spring transactions annotations java-8