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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Java Spring@Transactional类与方法优先级规则_Java_Spring_Transactions - Fatal编程技术网

Java Spring@Transactional类与方法优先级规则

Java Spring@Transactional类与方法优先级规则,java,spring,transactions,Java,Spring,Transactions,Spring说了一句“事务性的” 在评估方法的事务设置时,最派生的位置优先 这是否意味着方法上的注释完全覆盖了类中的注释,或者省略的属性(所以默认值)不算数 例如 那么,该方法的隔离设置是什么?这是Isolation.DEFAULT,因为这是默认值,所以它隐式重写Isolation.SERIALIZABLE,还是Isolation.SERIALIZABLE,因为没有在方法注释上显式指定?方法级别的注释完全重写类型级别的注释。这里不太可能有任何层次结构。让我再解释一下。无法确定用户是否为特定属性指

Spring说了一句“事务性的”

在评估方法的事务设置时,最派生的位置优先

这是否意味着方法上的注释完全覆盖了类中的注释,或者省略的属性(所以默认值)不算数

例如


那么,该方法的隔离设置是什么?这是
Isolation.DEFAULT
,因为这是默认值,所以它隐式重写
Isolation.SERIALIZABLE
,还是
Isolation.SERIALIZABLE
,因为没有在方法注释上显式指定?

方法级别的注释完全重写类型级别的注释。这里不太可能有任何层次结构。让我再解释一下。无法确定用户是否为特定属性指定了值,或者读取批注属性时是否返回了
默认值。因此,
Spring
或任何其他人都无法确定是否覆盖了特定属性,或者是否使用了默认值。因此,无法根据属性的存在或不存在做出决策。因此,无论何时重写任何注释(即,使用更精细的粒度指定注释),都需要指定所有必需的属性。因此,在您的例子中,
隔离。默认值将是应用的
隔离


但是,另一方面,假设您有自己的自定义注释,该注释将空字符串指定为某些属性的默认值。在这种情况下,如果类级注释为该属性指定了非空字符串,而方法级注释没有指定任何值(因此使用默认值:空字符串),则可以推断应该使用类级注释中的属性值。也就是说,不允许方法级注释中的默认值在类级重写用户指定的值。在任何这样的场景中,都必须确保默认值不代表有效的属性值。在
@Transactional
注释的情况下,
Isolation.DEFAULT
表示一个有效值,用户可能已经明确指定了该值。

回答得很好,特别是关于自定义注释和默认值的第二段。
@Transactional(isolation=Isolation.SERIALIZABLE)
public class MyService {

    @Transactional(readOnly=true)
    public void method() {
       ...
    }
}