4

Spring doc には 2 つの推奨事項があります。

Spring は、インターフェースにアノテーションを付けるのではなく、 @Transactional アノテーションを使用して、具象クラス (および具象クラスのメソッド) にのみアノテーションを付けることをお勧めします。確かに @Transactional アノテーションをインターフェイス (またはインターフェイス メソッド) に配置できますが、これはインターフェイス ベースのプロキシを使用している場合に期待どおりにしか機能しません。Java アノテーションがインターフェースから継承されないという事実は、クラスベースのプロキシ (proxy-target-class="true") またはウィービングベースのアスペクト (mode="aspectj") を使用している場合、トランザクション設定がプロキシおよびウィービング インフラストラクチャによって認識されず、オブジェクトはトランザクション プロキシにラップされません。これは明らかに悪いことです。

( http://static.springsource.org/spring/docs/3.0.x/reference/transaction.htmlより)

Spring AOP は、JDK 動的プロキシまたは CGLIB のいずれかを使用して、特定のターゲット オブジェクトのプロキシを作成します。(選択肢がある場合はいつでもJDK動的プロキシが優先されます)。

( http://static.springsource.org/spring/docs/3.0.x/reference/aop.html#aop-understanding-aop-proxiesから)

@Transactional両方の推奨事項に従うには、具体的なクラスに注釈を付ける必要がありますが、Spring がこのインターフェイスに JDK dynamix プロキシを使用できるように、すべてのトランザクション メソッドを含むインターフェイス (このクラスが実装する) を提供する必要があることを正しく理解していますか?

4

1 に答える 1

2

それはこのように動作します

  1. メソッドを備えたビジネス インターフェイスを用意し、インターフェイス メソッドに注釈を付けないでください。@Transactional

  2. 上記で定義したインターフェースの実装クラスを作成し、impl クラスのメソッドにアノテーションを付けます。@Transactional

Spring はインターフェイス ベースの JDK 動的プロキシの使用を推奨しているため、ビジネス インターフェイスを配置する必要があります。また、記載の通り

Java アノテーションはインターフェースから継承されません

具体的/実装クラスのメソッドに注釈を付ける必要があります@Transactional

于 2013-05-22T08:40:47.940 に答える