1

私の目標は、サービス クラスをトランザクションとして宣言する何らかの方法を持つことです。春の設定で明示的な宣言として残したくありません。過去に何度も新しいサービスを作成し、それらに関するトランザクションを宣言するのを忘れていました。したがって、私の意図は、 @TransactionalService カスタムアノテーションのようなものがある場合、次のことを行う必要があるということです:- 1. トランザクションサポートを提供します。しかし、春とは異なり、以下を @TransactionService アノテーションの一部にしたいと思います。

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>

アドバイスは貴重ですか?

4

1 に答える 1

0

確かに、新しいアノテーションを作成する代わりに、トランザクション サービスを同じパッケージに入れるだけで、ポイントカット (すべてのトランザクション サービスに対して 1 つだけ) は次のようになります。

<aop:config>
  <aop:pointcut id="transactionnalServiceMethods" expression="execution(* x.y.transactionnalservice.*.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionnalServiceMethods"/>
</aop:config>

アドバイスは上記と同じです:

  <tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
    <!-- all methods starting with 'get' are read-only -->
    <tx:method name="get*" read-only="true"/>
    <tx:method name="*"/>
  </tx:attributes>
  </tx:advice>
于 2011-04-07T07:07:40.750 に答える