クラス 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 void
postProcessProxyFactory
(ProxyFactory proxyFactory) 4.2 以降、このメソッドは、トランザクションメタデータの再処理を回避するために、プロキシインターフェースのセットにTransactionalProxy
を追加します。void
setBeanFactory
(BeanFactory beanFactory) このコールバックはオプションです: BeanFactory で実行していて、トランザクションマネージャーが明示的に設定されていない場合、BeanFactory からPlatformTransactionManager
型の一致する単一の Bean がフェッチされます。void
setPointcut
(Pointcut pointcut) 渡されたメソッドと属性に応じて、TransactionInterceptor の条件付き呼び出しを引き起こす可能性があるポイントカット、つまり Bean を設定します。void
setTransactionAttributes
(PropertiesSE transactionAttributes) メソッド名をキーとして、トランザクション属性記述子 (TransactionAttributeEditor 経由で解析) を値としてプロパティを設定します。たとえば、key="myMethod"、value="PROPAGATION_REQUIRED,readOnly" です。void
setTransactionAttributeSource
(TransactionAttributeSource transactionAttributeSource) トランザクション属性の検索に使用されるトランザクション属性ソースを設定します。void
setTransactionManager
(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)
TransactionAttributeSourceEditor
MethodMapTransactionAttributeSource
NameMatchTransactionAttributeSource
AnnotationTransactionAttributeSource
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