## org.springframework.transaction.annotation
Class AnnotationTransactionAttributeSource

    java.lang.Object
      org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource
          org.springframework.transaction.annotation.AnnotationTransactionAttributeSource

All Implemented Interfaces:
  Serializable, TransactionAttributeSource

    public class AnnotationTransactionAttributeSource

extends AbstractFallbackTransactionAttributeSource
implements Serializable

Implementation of the `TransactionAttributeSource` interface for working with transaction metadata in JDK 1.5+ annotation format.

This class reads Spring's JDK 1.5+ `Transactional` annotation and exposes corresponding transaction attributes to Spring's transaction infrastructure. Also supports EJB3's `TransactionAttribute` annotation (if present). This class may also serve as base class for a custom TransactionAttributeSource, or get customized through `TransactionAnnotationParser` strategies.

Since:
  1.2
Author:
  Colin Sampaleanu, Juergen Hoeller
See Also:
  `Transactional`, `TransactionAnnotationParser`, `SpringTransactionAnnotationParser`, `Ejb3TransactionAnnotationParser`, `TransactionAspectSupport.setTransactionAttributeSource(org.springframework.transaction.interceptor.TransactionAttributeSource)`, `TransactionProxyFactoryBean.setTransactionAttributeSource(org.springframework.transaction.interceptor.TransactionAttributeSource)`, Serialized Form

Field Summary

Fields inherited from class org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource
`logger`

Constructor Summary
`AnnotationTransactionAttributeSource()` Create a default AnnotationTransactionAttributeSource, supporting public methods that carry the `Transactional` annotation or the EJB3 `TransactionAttribute` annotation.
`AnnotationTransactionAttributeSource(boolean publicMethodsOnly)` Create a custom AnnotationTransactionAttributeSource, supporting public methods that carry the `Transactional` annotation or the EJB3 `TransactionAttribute` annotation.
`AnnotationTransactionAttributeSource(Set<TransactionAnnotationParser> annotationParsers)` Create a custom AnnotationTransactionAttributeSource.
`AnnotationTransactionAttributeSource(TransactionAnnotationParser annotationParser)` Create a custom AnnotationTransactionAttributeSource.

Method Summary
`protected boolean` `allowPublicMethodsOnly()` By default, only public methods can be made transactional.
`protected TransactionAttribute` `determineTransactionAttribute(AnnotatedElement ae)` Determine the transaction attribute for the given method or class.
`protected TransactionAttribute` `findTransactionAttribute(Class<?> clazz)` Subclasses need to implement this to return the transaction attribute for the given class, if any.
`protected TransactionAttribute` `findTransactionAttribute(Method method)` Subclasses need to implement this to return the transaction attribute for the given method, if any.

Methods inherited from class org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource
`getCacheKey, getTransactionAttribute`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### AnnotationTransactionAttributeSource

    public AnnotationTransactionAttributeSource()

  Create a default AnnotationTransactionAttributeSource, supporting public methods that carry the `Transactional` annotation or the EJB3 `TransactionAttribute` annotation.

### AnnotationTransactionAttributeSource

    public AnnotationTransactionAttributeSource(boolean publicMethodsOnly)

  Create a custom AnnotationTransactionAttributeSource, supporting public methods that carry the `Transactional` annotation or the EJB3 `TransactionAttribute` annotation.

  Parameters:
    `publicMethodsOnly` - whether to support public methods that carry the `Transactional` annotation only (typically for use with proxy-based AOP), or protected/private methods as well (typically used with AspectJ class weaving)

### AnnotationTransactionAttributeSource

    public AnnotationTransactionAttributeSource(TransactionAnnotationParser annotationParser)

  Create a custom AnnotationTransactionAttributeSource.

  Parameters:
    `annotationParser` - the TransactionAnnotationParser to use

### AnnotationTransactionAttributeSource

    public AnnotationTransactionAttributeSource(Set<TransactionAnnotationParser> annotationParsers)

  Create a custom AnnotationTransactionAttributeSource.

  Parameters:
    `annotationParsers` - the TransactionAnnotationParsers to use

Method Detail

### findTransactionAttribute

    protected TransactionAttribute findTransactionAttribute(Method method)

  Description copied from class: `AbstractFallbackTransactionAttributeSource`
  Subclasses need to implement this to return the transaction attribute for the given method, if any.

  Specified by:
    `findTransactionAttribute` in class `AbstractFallbackTransactionAttributeSource`
  Parameters:
    `method` - the method to retrieve the attribute for
  Returns:
    all transaction attribute associated with this method (or `null` if none)

### findTransactionAttribute

    protected TransactionAttribute findTransactionAttribute(Class<?> clazz)

  Description copied from class: `AbstractFallbackTransactionAttributeSource`
  Subclasses need to implement this to return the transaction attribute for the given class, if any.

  Specified by:
    `findTransactionAttribute` in class `AbstractFallbackTransactionAttributeSource`
  Parameters:
    `clazz` - the class to retrieve the attribute for
  Returns:
    all transaction attribute associated with this class (or `null` if none)

### determineTransactionAttribute

    protected TransactionAttribute determineTransactionAttribute(AnnotatedElement ae)

  Determine the transaction attribute for the given method or class.

  This implementation delegates to configured `TransactionAnnotationParsers` for parsing known annotations into Spring's metadata attribute class. Returns `null` if it's not transactional.

  Can be overridden to support custom annotations that carry transaction metadata.

  Parameters:
    `ae` - the annotated method or class
  Returns:
    TransactionAttribute the configured transaction attribute, or `null` if none was found

### allowPublicMethodsOnly

    protected boolean allowPublicMethodsOnly()

  By default, only public methods can be made transactional.

  Overrides:
    `allowPublicMethodsOnly` in class `AbstractFallbackTransactionAttributeSource`