org.springframework.transaction.interceptor

## Interface TransactionAttributeSource

- All Known Implementing Classes:
    AbstractFallbackTransactionAttributeSource, AnnotationTransactionAttributeSource, CompositeTransactionAttributeSource, MatchAlwaysTransactionAttributeSource, MethodMapTransactionAttributeSource, NameMatchTransactionAttributeSource

      public interface TransactionAttributeSource

  Strategy interface used by `TransactionInterceptor` for metadata retrieval.

  Implementations know how to source transaction attributes, whether from configuration, metadata attributes at source level (such as annotations), or anywhere else.

  Since:
    15.04.2003
  Author:
    Rod Johnson, Juergen Hoeller
  See Also:
    `TransactionAspectSupport.setTransactionAttributeSource(org.springframework.transaction.interceptor.TransactionAttributeSource)`, `TransactionProxyFactoryBean.setTransactionAttributeSource(org.springframework.transaction.interceptor.TransactionAttributeSource)`, `AnnotationTransactionAttributeSource`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `TransactionAttribute` | `getTransactionAttribute(Method method, Class<?> targetClass)` Return the transaction attribute for the given method, or `null` if the method is non-transactional.
    `default boolean` | `isCandidateClass(Class<?> targetClass)` Determine whether the given class is a candidate for transaction attributes in the metadata format of this `TransactionAttributeSource`.

- - ### Method Detail

    - #### isCandidateClass

          default boolean isCandidateClass(Class<?> targetClass)

      Determine whether the given class is a candidate for transaction attributes in the metadata format of this `TransactionAttributeSource`.

      If this method returns `false`, the methods on the given class will not get traversed for `getTransactionAttribute(java.lang.reflect.Method, java.lang.Class<?>)` introspection. Returning `false` is therefore an optimization for non-affected classes, whereas `true` simply means that the class needs to get fully introspected for each method on the given class individually.

      Parameters:
        `targetClass` - the class to introspect
      Returns:
        `false` if the class is known to have no transaction attributes at class or method level; `true` otherwise. The default implementation returns `true`, leading to regular introspection.
      Since:
        5.2

    - #### getTransactionAttribute

          @Nullable
          TransactionAttribute getTransactionAttribute(Method method,
                                                                 @Nullable
                                                                 Class<?> targetClass)

      Return the transaction attribute for the given method, or `null` if the method is non-transactional.
      Parameters:
        `method` - the method to introspect
        `targetClass` - the target class (may be `null`, in which case the declaring class of the method must be used)
      Returns:
        the matching transaction attribute, or `null` if none found