3

次の XML ベースのトランザクション AOP を Java 経由でプログラムでセットアップしたいと思います。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>

これまでのところ、私は次のものを持っています。次のようなエクスプレッション ポイントカットを作成できます。

   AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
   pointcut.setExpression("execution(* *..service.*Manager.*(..))");

AspectJPointcutAdvisor次に、との組み合わせを使用しAspectJAroundAdviceて、実際のアドバイスを設定できます。

txしかし、名前空間を支える Spring コードを見ると、TransactionInterceptorが作成されているようです。たぶん、私はこれをすべて間違って見ています。

なぜ私はこれをしたいのですか?

さて、Spring 構成を XML から @Configuration クラスに移動しましたが、tx 名前空間のものを変換する方法に行き詰まっています。私は注釈を使用し@EnableTransactionManagement@Transactionalいますが、上記のポイントカット式に一致するすべてのメソッドに注釈を追加するのはリスクが高すぎます。私は何かを逃すにちがいありません。

4

1 に答える 1

1

一方、一致するすべてのメソッドにトランザクションを適用しています。これを行うことはお勧めしません。サードパーティ ライブラリのメソッドにもトランザクションがあるため、式は非常に具体的にします。また、このアプローチでは粒度が貧弱です。ご覧のとおり、同じプロパティを追加しています。

readOnly のようなプロパティは非常に重要です。readOnly トランザクションはフラッシュせずに終了します。ほんの一例です。

于 2012-02-25T19:59:12.657 に答える