【发布时间】:2015-01-27 12:46:05
【问题描述】:
我有一个有几种方法的类。有些是公开的,有些则不是。请参见下面的示例。
将在事务上下文中执行哪些方法?只有公共方法?
我在documentation 中找不到答案。
@Transactionl
public class A {
public void pub() {...}
void pack() {...}
protected void prot() {...}
private void pri() {...}
}
【问题讨论】:
-
通常您有服务接口并通过 JDK 代理实现事务功能。在这种情况下,只有来自服务接口的方法被代理(因此是事务性的)。如果没有服务接口——我猜你的情况,A 类没有实现——你将不得不将 proxy-target-class 设置为 true,我希望你设法从实例外部调用的每个方法都被事务处理,即公共、受保护和包默认值。
-
It's in the documentation,只是不在
@Transactional部分。正如 Michal 所提到的,@Transactional通过创建代理来工作。所以只有通过代理进入的调用才会触发@Transactional逻辑。这也有例外。您可以使用编译时编织而不是运行时代理来获取私有/受保护方法上的@Transactional。 -
好吧,我的期望错了。实际上,文档的措辞与 Paulius Matulionis 的答案非常接近。在文档中搜索“如果您注释了受保护的、私有的或”,可以在文档中找到它。我认为他的答案是正确的。
标签: spring spring-transactions transactional