Package 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

Modifier and Type
Method
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`
`hasTransactionAttribute(Method method, Class<?> targetClass)`
Determine whether there is a transaction attribute for the given method.
`default boolean`
`isCandidateClass(Class<?> targetClass)`
Determine whether the given class is a candidate for transaction attributes in the metadata format of this `TransactionAttributeSource`.

## Method Details

### 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
See Also:
  - `hasTransactionAttribute(java.lang.reflect.Method, java.lang.Class<?>)`

### hasTransactionAttribute

default boolean hasTransactionAttribute(Method method, @Nullable Class<?> targetClass)
Determine whether there is a transaction attribute for the given method.

Parameters:
  `method` - the method to introspect
  `targetClass` - the target class (can be `null`, in which case the declaring class of the method must be used)
Since:
  6.2
See Also:
  - `getTransactionAttribute(java.lang.reflect.Method, java.lang.Class<?>)`

### 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 (can be `null`, in which case the declaring class of the method must be used)
Returns:
  the matching transaction attribute, or `null` if none found