Luk*_*ota 11 java spring transactions
春天说,abuot @Transactional
在评估方法的事务设置时,派生最多的位置优先.
这是否意味着方法上的注释完全覆盖了类中的注释,或者省略的属性(默认值)是否不计算?
例如
@Transactional(isolation=Isolation.SERIALIZABLE)
public class MyService {
@Transactional(readOnly=true)
public void method() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
那么方法的隔离设置是什么?这是Isolation.DEFAULT因为这是默认值,因此它会隐式覆盖Isolation.SERIALIZABLE或是Isolation.SERIALIZABLE因为没有在方法注释中明确指定?
Bha*_*ikh 19
方法级别的注释完全覆盖类型级别的注释.任何类型的层次结构在这里都不太可能.让我再解释一下.无法确定用户是否为特定属性指定了值,或者default在读取注释的属性时是否返回了值.因此,Spring或者其他任何人无法确定是否覆盖了特定属性,或者是否使用了默认值.因此,无法根据属性的存在与否做出决定.因此,每当您覆盖任何注释(即,以更精细的粒度指定它)时,您需要指定所有必需的属性.因此,在您的情况下,Isolation.DEFAULT将isolation适用.
但是,除此之外,假设您有自己的自定义注释,它将空字符串指定为某个属性的默认值.在这种情况下,如果您的类级别注释为该属性指定了非空字符串,并且您的方法级注释未指定任何值(因此使用默认值:空字符串),您可以推断出应使用类级注释中的attribute-value.也就是说,不允许方法级注释中的default-value覆盖类级别的用户指定值.在任何此类情况下,您必须确保default-value不表示有效的属性值.在@Transactional注释的情况下,Isolation.DEFAULT确实表示有效值,并且可能已由用户明确指定.
| 归档时间: |
|
| 查看次数: |
8939 次 |
| 最近记录: |