2012-02-25 13 views
2

私はセットアップするには、以下のXMLベースのトランザクション-AOPをプログラムでJavaの経由たい:プログラム型トランザクションAOP?

<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> 

は、これまでのところ、私は次のことを持っています。そして、おそらく私は、実際のアドバイスを設定することができAspectJPointcutAdvisorAspectJAroundAdviceの組み合わせを使用して

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

:私はこのような表現のポイントカットを作成することができます。

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

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

私は春の構成をXMLから@Configurationクラスに移しましたが、tx名前空間の内容をどのように変換するかについては固執しています。 @EnableTransactionManagement@Transactionalアノテーションを使用していますが、上記のポイントカット式にマッチしたすべてのメソッドに注釈を追加するのは危険です。私は何かが見逃されている。

答えて

1

一方、一致するすべてのメソッドにトランザクションを適用しています。私はこれをすることをお勧めしません。第三者図書館のメソッドでさえもトランザクションがあるので、表現の中で非常に具体的なものにしてください。また、この方法では粒度が貧弱です。私はあなたが同じプロパティを追加しているのを見ています。

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

関連する問題