Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧&x27;类级别上的s@Transactional应用于哪些方法?_Spring_Spring Transactions_Transactional - Fatal编程技术网

Spring 弹簧&x27;类级别上的s@Transactional应用于哪些方法?

Spring 弹簧&x27;类级别上的s@Transactional应用于哪些方法?,spring,spring-transactions,transactional,Spring,Spring Transactions,Transactional,我有一个有几种方法的类。有些是公开的,有些不是。见下面的例子 在事务上下文中将执行哪些方法?只执行公共方法 我在表格里找不到答案 是的,只有公共方法才会显示事务设置。如果将@Transactional注释放在私有的、受保护的或包可见的方法上,或者放在具有此类方法的类上,则不会产生任何错误,只是不会为这些方法执行事务设置 因此,在您的情况下,事务将仅通过此方法打开: public void pub() {...} 可以找到文档。通常您有服务接口,并通过JDK代理实现事务功能。在这种情况下,只有来

我有一个有几种方法的类。有些是公开的,有些不是。见下面的例子

在事务上下文中将执行哪些方法?只执行公共方法

我在表格里找不到答案


是的,只有公共方法才会显示事务设置。如果将
@Transactional
注释放在私有的、受保护的或包可见的方法上,或者放在具有此类方法的类上,则不会产生任何错误,只是不会为这些方法执行事务设置

因此,在您的情况下,事务将仅通过此方法打开:

public void pub() {...}

可以找到文档。

通常您有服务接口,并通过JDK代理实现事务功能。在这种情况下,只有来自服务接口的方法被代理(因此是事务性的)。如果没有服务接口-我猜,在您的情况下,类A没有实现-您必须将代理目标类设置为true,并且我希望您从实例外部设法调用的每个方法都会被事务处理,即public、protected和package default,只是不在
@Transactional
一节中。正如Michal提到的,
@Transactional
通过创建代理来工作。因此,只有通过代理进入的调用才会触发
@Transactional
逻辑。这方面也有例外。您可以使用编译时编织而不是运行时代理来获取私有/受保护方法上的
@Transactional
。事实上,医生们说这句话的措辞与保利乌斯·马图利奥尼斯的答案非常接近。在文档中搜索“如果您对受保护、私有或进行注释”,则会在文档中找到它。我认为他的答案是正确的。谢谢。你怎么知道的?你能指出源代码或文档吗?对不起。当注释处于类级别时,没有提到只有公共方法是事务性的。文档所说的是@Transactional注释不能放在非公共方法上。无论如何,非公共必须始终从公共方法执行,因此,如果@Transactional注释是在类上定义的,那么所有方法都将在事务上下文中执行。如果我将
@Transactional
注释放在类级别上,它是否适用于此类的公共构造函数?
public void pub() {...}