• spring事务@Transactional的源码


    /*
     * Copyright 2002-2015 the original author or authors.//===============
     *  2002 - 2015年版权所有作者或作者
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at//=========================
     *在Apache许可下的2.0版本(“许可证”);*你可能不使用这个文件除了遵守许可证。*你可以获得许可证的副本
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.//================================

    除非适用法律或书面同意,软件 在许可证下的分配是基于“AS is”的基础, 没有任何形式的保证或条件,要么表示,要么暗示。

    *查看管理权限的特定语言的许可证 在许可证下的限制。
     */

    package org.springframework.transaction.annotation;

    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    import org.springframework.core.annotation.AliasFor;
    import org.springframework.transaction.TransactionDefinition;

    /**
     * Describes transaction attributes on a method or class.

    //===================描述方法或类中的事务属性。
     *
     * <p>This annotation type is generally directly comparable to Spring's//==这种注释类型通常可以直接与Spring相媲美
     * {@link org.springframework.transaction.interceptor.RuleBasedTransactionAttribute}
     * class, and in fact {@link AnnotationTransactionAttributeSource} will directly
     * convert the data to the latter class, so that Spring's transaction support code
     * does not have to know about annotations. If no rules are relevant to the exception,
     * it will be treated like
     * {@link org.springframework.transaction.interceptor.DefaultTransactionAttribute}
     * (rolling back on runtime exceptions).
     *
     * <p>For specific information about the semantics of this annotation's attributes,
     * consult the {@link org.springframework.transaction.TransactionDefinition} and
     * {@link org.springframework.transaction.interceptor.TransactionAttribute} javadocs.
     *
     * @author Colin Sampaleanu
     * @author Juergen Hoeller
     * @author Sam Brannen
     * @since 1.2
     * @see org.springframework.transaction.interceptor.TransactionAttribute
     * @see org.springframework.transaction.interceptor.DefaultTransactionAttribute
     * @see org.springframework.transaction.interceptor.RuleBasedTransactionAttribute
     */
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Transactional {

        /**
         * Alias for {@link #transactionManager}.
         * @see #transactionManager
         */
        @AliasFor("transactionManager")
        String value() default "";

        /**
         * A <em>qualifier</em> value for the specified transaction.
         * <p>May be used to determine the target transaction manager,
         * matching the qualifier value (or the bean name) of a specific
         * {@link org.springframework.transaction.PlatformTransactionManager}
         * bean definition.
         * @since 4.2
         * @see #value
         */
        @AliasFor("value")
        String transactionManager() default "";

        /**
         * The transaction propagation type.
         * <p>Defaults to {@link Propagation#REQUIRED}.
         * @see org.springframework.transaction.interceptor.TransactionAttribute#getPropagationBehavior()
         */
        Propagation propagation() default Propagation.REQUIRED;

        /**
         * The transaction isolation level.
         * <p>Defaults to {@link Isolation#DEFAULT}.
         * @see org.springframework.transaction.interceptor.TransactionAttribute#getIsolationLevel()
         */
        Isolation isolation() default Isolation.DEFAULT;

        /**
         * The timeout for this transaction.
         * <p>Defaults to the default timeout of the underlying transaction system.
         * @see org.springframework.transaction.interceptor.TransactionAttribute#getTimeout()
         */
        int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

        /**
         * {@code true} if the transaction is read-only.
         * <p>Defaults to {@code false}.
         * <p>This just serves as a hint for the actual transaction subsystem;
         * it will <i>not necessarily</i> cause failure of write access attempts.
         * A transaction manager which cannot interpret the read-only hint will
         * <i>not</i> throw an exception when asked for a read-only transaction.
         * @see org.springframework.transaction.interceptor.TransactionAttribute#isReadOnly()
         */
        boolean readOnly() default false;

        /**
         * Defines zero (0) or more exception {@link Class classes}, which must be
         * subclasses of {@link Throwable}, indicating which exception types must cause
         * a transaction rollback.
         * <p>This is the preferred way to construct a rollback rule (in contrast to
         * {@link #rollbackForClassName}), matching the exception class and its subclasses.
         * <p>Similar to {@link org.springframework.transaction.interceptor.RollbackRuleAttribute#RollbackRuleAttribute(Class clazz)}
         * @see #rollbackForClassName
         */
        Class<? extends Throwable>[] rollbackFor() default {};

        /**
         * Defines zero (0) or more exception names (for exceptions which must be a
         * subclass of {@link Throwable}), indicating which exception types must cause
         * a transaction rollback.
         * <p>This can be a substring of a fully qualified class name, with no wildcard
         * support at present. For example, a value of {@code "ServletException"} would
         * match {@link javax.servlet.ServletException} and its subclasses.
         * <p><b>NB:</b> Consider carefully how specific the pattern is and whether
         * to include package information (which isn't mandatory). For example,
         * {@code "Exception"} will match nearly anything and will probably hide other
         * rules. {@code "java.lang.Exception"} would be correct if {@code "Exception"}
         * were meant to define a rule for all checked exceptions. With more unusual
         * {@link Exception} names such as {@code "BaseBusinessException"} there is no
         * need to use a FQN.
         * <p>Similar to {@link org.springframework.transaction.interceptor.RollbackRuleAttribute#RollbackRuleAttribute(String exceptionName)}
         * @see #rollbackFor
         */
        String[] rollbackForClassName() default {};

        /**
         * Defines zero (0) or more exception {@link Class Classes}, which must be
         * subclasses of {@link Throwable}, indicating which exception types must
         * <b>not</b> cause a transaction rollback.
         * <p>This is the preferred way to construct a rollback rule (in contrast
         * to {@link #noRollbackForClassName}), matching the exception class and
         * its subclasses.
         * <p>Similar to {@link org.springframework.transaction.interceptor.NoRollbackRuleAttribute#NoRollbackRuleAttribute(Class clazz)}
         * @see #noRollbackForClassName
         */
        Class<? extends Throwable>[] noRollbackFor() default {};

        /**
         * Defines zero (0) or more exception names (for exceptions which must be a
         * subclass of {@link Throwable}) indicating which exception types must <b>not</b>
         * cause a transaction rollback.
         * <p>See the description of {@link #rollbackForClassName} for further
         * information on how the specified names are treated.
         * <p>Similar to {@link org.springframework.transaction.interceptor.NoRollbackRuleAttribute#NoRollbackRuleAttribute(String exceptionName)}
         * @see #noRollbackFor
         */
        String[] noRollbackForClassName() default {};

    }

  • 相关阅读:
    秀秀我的PENTAX的手动标头
    软件测试工具
    071226 冷
    071228晴转雨
    长假计划
    Merry Christmas
    信宿事件
    並べ替えーーバブルソート等
    收藏
    实践浪漫
  • 原文地址:https://www.cnblogs.com/wangzn/p/7117757.html
Copyright © 2020-2023  润新知