クラス TransactionProxyFactoryBean

実装されたすべてのインターフェース:
SerializableSEAwareBeanClassLoaderAwareBeanFactoryAwareFactoryBean<ObjectSE>InitializingBean

public class TransactionProxyFactoryBean extends AbstractSingletonProxyFactoryBean implements BeanFactoryAware
プロキシファクトリ Bean により、宣言型トランザクションの処理が簡素化されます。これは、個別の TransactionInterceptor 定義を持つ標準 AOP ProxyFactoryBean の便利な代替手段です。

HISTORICAL NOTE : このクラスはもともと、宣言的なトランザクション境界の典型的なケースをカバーするために設計されました: つまり、シングルトンターゲットオブジェクトをトランザクションプロキシでラップし、ターゲットが実装するすべてのインターフェースをプロキシします。ただし、Spring バージョン 2.0 以降では、ここで提供される機能は、より便利な tx: XML 名前空間に置き換えられています。Spring アプリケーションでトランザクションを管理するための最新のオプションを理解するには、Spring リファレンスドキュメントの宣言型トランザクション管理のセクションを参照してください。これらの理由により、ユーザーは、@ Transactional と同様に tx: XML 名前空間を優先する必要があります。および @EnableTransactionManagement アノテーション。

指定する必要がある主なプロパティは 3 つあります。

  • "transactionManager" : 使用する PlatformTransactionManager 実装 (たとえば、JtaTransactionManager インスタンス)
  • " ゴール ": トランザクションプロキシを作成する対象のオブジェクト
  • "transactionAttributes" : ターゲットメソッド名ごとのトランザクション属性(たとえば、伝播動作や "readOnly" フラグ) (またはメソッド名パターン)

"transactionManager" プロパティが明示的に設定されておらず、この FactoryBeanListableBeanFactory で実行されている場合、型 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
関連事項: