クラス TransactionProxyFactoryBean
- 実装されているすべてのインターフェース:
SerializableSE、Aware、BeanClassLoaderAware、BeanFactoryAware、FactoryBean<ObjectSE>、InitializingBean
TransactionInterceptor 定義を持つ標準 AOP ProxyFactoryBean の便利な代替手段です。HISTORICAL NOTE : このクラスはもともと、宣言的なトランザクション境界の典型的なケースをカバーするために設計されました: つまり、シングルトンターゲットオブジェクトをトランザクションプロキシでラップし、ターゲットが実装するすべてのインターフェースをプロキシします。ただし、Spring バージョン 2.0 以降では、ここで提供される機能は、より便利な tx: XML 名前空間に置き換えられています。Spring アプリケーションでトランザクションを管理するための最新のオプションを理解するには、Spring リファレンスドキュメントの宣言型トランザクション管理のセクションを参照してください。これらの理由により、ユーザーは、@ Transactional と同様に tx: XML 名前空間を優先する必要があります。および @EnableTransactionManagement アノテーション。
指定する必要がある主なプロパティは 3 つあります。
- "transactionManager" : 使用する
PlatformTransactionManager実装 (たとえば、JtaTransactionManagerインスタンス) - " ゴール ": トランザクションプロキシを作成する対象のオブジェクト
- "transactionAttributes" : ターゲットメソッド名ごとのトランザクション属性(伝播動作や "readOnly" フラグなど) (またはメソッド名パターン)
"transactionManager" プロパティが明示的に設定されておらず、この FactoryBean が ListableBeanFactory で実行されている場合、型 PlatformTransactionManager の一致する単一の Bean が BeanFactory から取得されます。
TransactionInterceptor とは対照的に、トランザクション属性はプロパティとして指定され、メソッド名はキー、トランザクション属性記述子は値として指定されます。メソッド名は常にターゲットクラスに適用されます。
内部的には TransactionInterceptor インスタンスが使用されますが、このクラスのユーザーは気にする必要はありません。オプションで、メソッド pointcut を指定して、基になる TransactionInterceptor を条件付きで呼び出すことができます。
"preInterceptors" および "postInterceptors" プロパティを設定すると、PerformanceMonitorInterceptor などの追加のインターセプターをミックスに追加できます。
ヒント : このクラスは、親 / 子 Bean 定義でよく使用されます。通常、トランザクションマネージャーとデフォルトのトランザクション属性(メソッド名パターン用)を抽象親 Bean 定義で定義し、特定のターゲットオブジェクトの具体的な子 Bean 定義を派生させます。これにより、Bean ごとの定義作業が最小限に抑えられます。
<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>- 導入:
- 21.08.2003
- 作成者:
- Juergen Hoeller, Dmitriy Kopylenko, Rod Johnson, Chris Beams
- 関連事項:
フィールドのサマリー
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTEコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected ObjectSEこの FactoryBean の TransactionInterceptor のアドバイザを作成します。protected voidpostProcessProxyFactory(ProxyFactory proxyFactory) 4.2 以降、このメソッドは、トランザクションメタデータの再処理を回避するために、プロキシインターフェースのセットにTransactionalProxyを追加します。voidsetBeanFactory(BeanFactory beanFactory) このコールバックはオプションです: BeanFactory で実行していて、トランザクションマネージャーが明示的に設定されていない場合、BeanFactory からPlatformTransactionManager型の一致する単一の Bean がフェッチされます。voidsetPointcut(Pointcut pointcut) 渡されたメソッドと属性に応じて、TransactionInterceptor の条件付き呼び出しを引き起こす可能性があるポイントカット、つまり Bean を設定します。voidsetTransactionAttributes(PropertiesSE transactionAttributes) メソッド名をキーとして、トランザクション属性記述子(TransactionAttributeEditor を介して解析)を値としてプロパティを設定します。voidsetTransactionAttributeSource(TransactionAttributeSource transactionAttributeSource) トランザクション属性の検索に使用されるトランザクション属性ソースを設定します。voidsetTransactionManager(PlatformTransactionManager transactionManager) デフォルトのトランザクションマネージャーを設定します。クラス org.springframework.aop.framework.AbstractSingletonProxyFactoryBean から継承されたメソッド
afterPropertiesSet, createTargetSource, getObject, getObjectType, isSingleton, setAdvisorAdapterRegistry, setBeanClassLoader, setPostInterceptors, setPreInterceptors, setProxyClassLoader, setProxyInterfaces, setTargetクラス org.springframework.aop.framework.ProxyConfig から継承されたメソッド
copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setFrozen, setOpaque, setOptimize, setProxyTargetClass, toString
コンストラクターの詳細
TransactionProxyFactoryBean
public TransactionProxyFactoryBean()
メソッドの詳細
setTransactionManager
デフォルトのトランザクションマネージャーを設定します。これにより、実際のトランザクション管理が実行されます。このクラスは、それを呼び出す方法の 1 つにすぎません。setTransactionAttributes
メソッド名をキーとして、トランザクション属性記述子 (TransactionAttributeEditor 経由で解析) を値としてプロパティを設定します。例: key="myMethod"、value="PROPAGATION_REQUIRED,readOnly"。メモ: メソッド名は、インターフェースで定義されているか、クラス自体で定義されているかに関係なく、常にターゲットクラスに適用されます。
内部的には、NameMatchTransactionAttributeSource は指定されたプロパティから作成されます。
setTransactionAttributeSource
トランザクション属性の検索に使用されるトランザクション属性ソースを設定します。String プロパティ値を指定すると、PropertyEditor はその値から MethodMapTransactionAttributeSource を作成します。- 関連事項:
setTransactionAttributes(java.util.Properties)TransactionAspectSupport.setTransactionAttributeSource(org.springframework.transaction.interceptor.TransactionAttributeSource)TransactionAttributeSourceEditorMethodMapTransactionAttributeSourceNameMatchTransactionAttributeSourceAnnotationTransactionAttributeSource
setPointcut
渡されたメソッドと属性に応じて、TransactionInterceptor の条件付き呼び出しを引き起こす可能性があるポイントカット、つまり Bean を設定します。注: 追加のインターセプターが常に呼び出されます。setBeanFactory
このコールバックはオプションです: BeanFactory で実行していて、トランザクションマネージャーが明示的に設定されていない場合、BeanFactory からPlatformTransactionManager型の一致する単一の Bean がフェッチされます。- 次で指定:
- インターフェース
BeanFactoryAwareのsetBeanFactory - パラメーター:
beanFactory- 所有 BeanFactory(非null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
createMainInterceptor
この FactoryBean の TransactionInterceptor のアドバイザを作成します。postProcessProxyFactory
4.2 以降、このメソッドは、トランザクションメタデータの再処理を回避するために、プロキシインターフェースのセットにTransactionalProxyを追加します。- オーバーライド:
- クラス
AbstractSingletonProxyFactoryBeanのpostProcessProxyFactory - パラメーター:
proxyFactory- 使用される AOP ProxyFactory