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 theTransactionAttributeSource
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 JTA 1.2'sTransactional
and EJB3'sTransactionAttribute
annotation (if present). This class may also serve as base class for a custom TransactionAttributeSource, or get customized throughTransactionAnnotationParser
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 Description AnnotationTransactionAttributeSource()
Create a default AnnotationTransactionAttributeSource, supporting public methods that carry theTransactional
annotation or the EJB3TransactionAttribute
annotation.AnnotationTransactionAttributeSource(boolean publicMethodsOnly)
Create a custom AnnotationTransactionAttributeSource, supporting public methods that carry theTransactional
annotation or the EJB3TransactionAttribute
annotation.AnnotationTransactionAttributeSource(Set<TransactionAnnotationParser> annotationParsers)
Create a custom AnnotationTransactionAttributeSource.AnnotationTransactionAttributeSource(TransactionAnnotationParser annotationParser)
Create a custom AnnotationTransactionAttributeSource.AnnotationTransactionAttributeSource(TransactionAnnotationParser... annotationParsers)
Create a custom AnnotationTransactionAttributeSource.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
allowPublicMethodsOnly()
By default, only public methods can be made transactional.protected TransactionAttribute
determineTransactionAttribute(AnnotatedElement element)
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()
boolean
isCandidateClass(Class<?> targetClass)
Determine whether the given class is a candidate for transaction attributes in the metadata format of thisTransactionAttributeSource
.Methods inherited from class org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource
computeTransactionAttribute, getCacheKey, getTransactionAttribute
Constructor Detail
AnnotationTransactionAttributeSource
public AnnotationTransactionAttributeSource()
Create a default AnnotationTransactionAttributeSource, supporting public methods that carry theTransactional
annotation or the EJB3TransactionAttribute
annotation.
AnnotationTransactionAttributeSource
public AnnotationTransactionAttributeSource(boolean publicMethodsOnly)
Create a custom AnnotationTransactionAttributeSource, supporting public methods that carry theTransactional
annotation or the EJB3TransactionAttribute
annotation.- Parameters:
publicMethodsOnly
- whether to support public methods that carry theTransactional
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
isCandidateClass
public boolean isCandidateClass(Class<?> targetClass)
Description copied from interface:TransactionAttributeSource
Determine whether the given class is a candidate for transaction attributes in the metadata format of thisTransactionAttributeSource
.If this method returns
false
, the methods on the given class will not get traversed forTransactionAttributeSource.getTransactionAttribute(java.lang.reflect.Method, java.lang.Class<?>)
introspection. Returningfalse
is therefore an optimization for non-affected classes, whereastrue
simply means that the class needs to get fully introspected for each method on the given class individually.- Specified by:
isCandidateClass
in interfaceTransactionAttributeSource
- 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 returnstrue
, leading to regular introspection.
findTransactionAttribute
@Nullable 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 classAbstractFallbackTransactionAttributeSource
- Parameters:
clazz
- the class to retrieve the attribute for- Returns:
- all transaction attribute associated with this class, or
null
if none
findTransactionAttribute
@Nullable 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 classAbstractFallbackTransactionAttributeSource
- Parameters:
method
- the method to retrieve the attribute for- Returns:
- all transaction attribute associated with this method, or
null
if none
determineTransactionAttribute
@Nullable protected TransactionAttribute determineTransactionAttribute(AnnotatedElement element)
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. Returnsnull
if it's not transactional.Can be overridden to support custom annotations that carry transaction metadata.
- Parameters:
element
- the annotated method or class- Returns:
- 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 classAbstractFallbackTransactionAttributeSource