Proxy factory bean for simplified declarative transaction handling.
This is a convenient alternative to a standard AOP
org.springframework.aop.framework.ProxyFactoryBeanwith a separate
TransactionInterceptor definition.
HISTORICAL NOTE: This class was originally designed to cover the
typical case of declarative transaction demarcation: namely, wrapping a singleton
target object with a transactional proxy, proxying all the interfaces that the target
implements. However, in Spring versions 2.0 and beyond, the functionality provided here
is superseded by the more convenient
tx: XML namespace. See the declarative transaction management section of the
Spring reference documentation to understand the modern options for managing
transactions in Spring applications. For these reasons, users should favor of
the
tx: XML namespace as well as
the @
org.springframework.transaction.annotation.Transactionaland @
org.springframework.transaction.annotation.EnableTransactionManagement annotations.
There are three main properties that need to be specified:
- "transactionManager": the
PlatformTransactionManager implementation to use
(for example, a
org.springframework.transaction.jta.JtaTransactionManager instance)
- "target": the target object that a transactional proxy should be created for
- "transactionAttributes": the transaction attributes (for example, propagation
behavior and "readOnly" flag) per target method name (or method name pattern)
If the "transactionManager" property is not set explicitly and this
FactoryBeanis running in a
ListableBeanFactory, a single matching bean of type
PlatformTransactionManager will be fetched from the
BeanFactory.
In contrast to
TransactionInterceptor, the transaction attributes are
specified as properties, with method names as keys and transaction attribute
descriptors as values. Method names are always applied to the target class.
Internally, a
TransactionInterceptor instance is used, but the user of this
class does not have to care. Optionally, a method pointcut can be specified
to cause conditional invocation of the underlying
TransactionInterceptor.
The "preInterceptors" and "postInterceptors" properties can be set to add
additional interceptors to the mix, like
org.springframework.aop.interceptor.PerformanceMonitorInterceptor.
HINT: This class is often used with parent / child bean definitions.
Typically, you will define the transaction manager and default transaction
attributes (for method name patterns) in an abstract parent bean definition,
deriving concrete child bean definitions for specific target objects.
This reduces the per-bean definition effort to a minimum.