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

Constructors
Constructor and Description
`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... annotationParsers)` Create a custom AnnotationTransactionAttributeSource.
`AnnotationTransactionAttributeSource(TransactionAnnotationParser annotationParser)` Create a custom AnnotationTransactionAttributeSource.

### Method Summary

Methods
`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.
`boolean` `equals(Object other)`
`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.
`int` `hashCode()`

### Methods inherited from class org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource

`getCacheKey, getTransactionAttribute`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, 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(TransactionAnnotationParser... annotationParsers)

Create a custom AnnotationTransactionAttributeSource.

Parameters:
  `annotationParsers` - the TransactionAnnotationParsers 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`

#### equals

    public boolean equals(Object other)

Overrides:
  `equals` in class `Object`

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `Object`