org.springframework.aop.framework.ProxyFactoryBean
with 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 modern options for managing
transactions in Spring applications. For these reasons, users should favor
the tx: XML namespace as well as
the @Transactional
and @EnableTransactionManagement annotations.
There are three main properties that need to be specified:
PlatformTransactionManager implementation to use
(for example, a org.springframework.transaction.jta.JtaTransactionManager instance)
If the "transactionManager" property is not set explicitly and this FactoryBean
is 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..
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.
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="myProxy" parent="baseTransactionProxy">
<property name="target" ref="myTarget"/>
</bean>
<bean id="yourProxy" parent="baseTransactionProxy">
<property name="target" ref="yourTarget"/>
</bean>
setTransactionManager, setTarget, setTransactionAttributes, TransactionInterceptor, org.springframework.aop.framework.ProxyFactoryBean
| Modifier and Type | Field and Description |
|---|---|
| private Pointcut | |
| private final TransactionInterceptor |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| protected Object | createMainInterceptor()
Implements abstract org. Creates an advisor for this FactoryBean's TransactionInterceptor. |
| protected void | postProcessProxyFactory(ProxyFactory
the AOP ProxyFactory about to be used proxyFactory)Overrides org. As of 4.2, this method adds |
| public void | setBeanFactory(BeanFactory
owning BeanFactory (never beanFactory)null).
The bean can immediately call methods on the factory.Implements org. This callback is optional: If running in a BeanFactory and no transaction
manager has been set explicitly, a single matching bean of type
|
| public void | setPointcut(Pointcut pointcut)
Set a pointcut, i.e a bean that can cause conditional invocation of the TransactionInterceptor depending on method and attributes passed. |
| public void | setTransactionAttributes(Properties transactionAttributes)
Set properties with method names as keys and transaction attribute descriptors (parsed via TransactionAttributeEditor) as values: e.g. key = "myMethod", value = "PROPAGATION_REQUIRED,readOnly". |
| public void | setTransactionAttributeSource(TransactionAttributeSource transactionAttributeSource)
Set the transaction attribute source which is used to find transaction attributes. |
| public void | setTransactionManager(PlatformTransactionManager transactionManager)
Set the default transaction manager. |
| pointcut | back to summary |
|---|---|
| private Pointcut pointcut
| |
| transactionInterceptor | back to summary |
|---|---|
| private final TransactionInterceptor transactionInterceptor | |
| TransactionProxyFactoryBean | back to summary |
|---|---|
| public TransactionProxyFactoryBean() | |
| createMainInterceptor | back to summary |
|---|---|
| protected Object createMainInterceptor() Implements abstract org. Creates an advisor for this FactoryBean's TransactionInterceptor.
| |
| postProcessProxyFactory | back to summary |
|---|---|
| protected void postProcessProxyFactory(ProxyFactory proxyFactory) Overrides org. As of 4.2, this method adds
| |
| setBeanFactory | back to summary |
|---|---|
| public void setBeanFactory(BeanFactory beanFactory) Implements org. This callback is optional: If running in a BeanFactory and no transaction
manager has been set explicitly, a single matching bean of type
| |
| setPointcut | back to summary |
|---|---|
| public void setPointcut(Pointcut pointcut) Set a pointcut, i.e a bean that can cause conditional invocation of the TransactionInterceptor depending on method and attributes passed. Note Additional interceptors are always invoked.
| |
| setTransactionAttributes | back to summary |
|---|---|
| public void setTransactionAttributes(Properties transactionAttributes) Set properties with method names as keys and transaction attribute descriptors (parsed via TransactionAttributeEditor) as values: e.g. key = "myMethod", value = "PROPAGATION_REQUIRED,readOnly". Note Method names are always applied to the target class, no matter if defined in an interface or the class itself. Internally, a NameMatchTransactionAttributeSource will be created from the given properties. | |
| setTransactionAttributeSource | back to summary |
|---|---|
| public void setTransactionAttributeSource(TransactionAttributeSource transactionAttributeSource) Set the transaction attribute source which is used to find transaction attributes. If specifying a String property value, a PropertyEditor will create a MethodMapTransactionAttributeSource from the value. | |
| setTransactionManager | back to summary |
|---|---|
| public void setTransactionManager(PlatformTransactionManager transactionManager) Set the default transaction manager. This will perform actual transaction management: This class is just a way of invoking it. | |