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 プロキシを使用できるように、すべてのトランザクション メソッドを含むインターフェイス (このクラスが実装する) を提供する必要があることを正しく理解していますか?