1、用途
Spring的公共事务属性实现。默认情况下回滚运行时异常,但未被检查。
2、类图
3、类分析
import org.springframework.lang.Nullable;
import org.springframework.transaction.interceptor.TransactionAttribute;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.StringUtils;
/**
* Spring的公共事务属性实现。
* 默认情况下回滚运行时异常,但未被检查。
*/
@SuppressWarnings("serial")
public class DefaultTransactionAttribute extends DefaultTransactionDefinition implements TransactionAttribute {
@Nullable
private String qualifier;
@Nullable
private String descriptor;
/**
* 使用默认设置创建一个新的DefaultTransactionAttribute。
* 可以通过bean属性设置器进行修改。
* @see #setPropagationBehavior
* @see #setIsolationLevel
* @see #setTimeout
* @see #setReadOnly
* @see #setName
*/
public DefaultTransactionAttribute() {
super();
}
/**
* 拷贝构造函数。可以通过bean属性设置器修改定义。
* @see #setPropagationBehavior
* @see #setIsolationLevel
* @see #setTimeout
* @see #setReadOnly
* @see #setName
*/
public DefaultTransactionAttribute(TransactionAttribute other) {
super(other);
}
/**
* 使用给定的传播行为创建一个新的DefaultTransactionAttribute。
* 可以通过bean属性设置器进行修改。
* @param propagationBehavior one of the propagation constants in the
* TransactionDefinition interface
* @see #setIsolationLevel
* @see #setTimeout
* @see #setReadOnly
*/
public DefaultTransactionAttribute(int propagationBehavior) {
super(propagationBehavior);
}
/**
* 将限定符值与此事务属性关联。
* 这可以用于选择相应的事务管理器来处理此特定事务。
* @since 3.0
*/
public void setQualifier(@Nullable String qualifier) {
this.qualifier = qualifier;
}
/**
* 返回与此事务属性关联的限定符值。
* @since 3.0
*/
@Override
@Nullable
public String getQualifier() {
return this.qualifier;
}
/**
* 设置此事务属性的描述符,
* 例如,指示属性应用于何处。
* @since 4.3.4
*/
public void setDescriptor(@Nullable String descriptor) {
this.descriptor = descriptor;
}
/**
* 返回此事务属性的描述符,如果没有,则返回{@code null}。
* @since 4.3.4
*/
@Nullable
public String getDescriptor() {
return this.descriptor;
}
/**
* 默认行为与EJB一样:回滚未检查的异常({@link RuntimeException}),
* 假设出现任何业务规则之外的意外结果。
* 此外,我们还尝试回滚{@link Error},这显然也是一个意外结果。
* 相反,检查异常被认为是业务异常,因此是事务性业务方法的常规预期结果,即一种可选的返回值,它仍然允许常规完成资源操作。
* 这与TransactionTemplate的默认行为基本一致,
* 除了TransactionTemplate还回滚未声明的已检查异常(一种极端情况)。
* 对于声明性事务,我们希望将受控异常有意声明为业务异常,从而在缺省情况下导致提交。
* @see org.springframework.transaction.support.TransactionTemplate#execute
*/
@Override
public boolean rollbackOn(Throwable ex) {
return (ex instanceof RuntimeException || ex instanceof Error);
}
/**
* 返回此事务属性的标识说明。
* 可用于子类,以包含在它们的{@code toString()}结果中。
*/
protected final StringBuilder getAttributeDescription() {
StringBuilder result = getDefinitionDescription();
if (StringUtils.hasText(this.qualifier)) {
result.append("; '").append(this.qualifier).append("'");
}
return result;
}
}
来源:oschina
链接:https://my.oschina.net/u/3777515/blog/3164566