3

@Transactional以前は、すべての Spring サービス (クラス) に注釈を追加していました。そして、私は考えました: トランザクションの動作が同じである必要がある場合、本当にそうしなければならないのでしょうか? (もちろん、そうすべきでない場合は、メソッドに他のパラメーターを追加します。) を使用した継承に関する有用な@Transational情報を見つけようとしました。次の例でとを試してみましたが、 のように見えます。@Transactional@Inherited@Transactional@InheritedrollbackFornoRollbackFor@TransactionalGenericServicedoSmthSpecific

@Transactional
public abstract class GenericService {
    public void doSmthGeneric() {
    }
}

public class SpecificService extends GenericService {
    public void doSmthSpecific() {
    }
}

そして、インターフェースだった場合、うまくいかないGenericServiceと思います。「間違っている場合は訂正してください」という質問のようなものだと思います。実際にスーパークラスのみに追加しても問題ないかどうか、ここで何かが欠けているかどうかを知りたいです。詳細な説明(またはそのような説明へのリンク)をいただければ幸いです。@Transactional

4

1 に答える 1

2

ドキュメントの引用

@Transactional アノテーションは、インターフェイス定義、インターフェイスのメソッド、クラス定義、またはクラスのパブリック メソッドの前に配置できます。

また、インターフェイス/インターフェイス メソッドに注釈を付けないことも推奨しています。

Spring は、インターフェースにアノテーションを付けるのではなく、@Transactional アノテーションを使用して、具象クラス (および具象クラスのメソッド) にのみアノテーションを付けることをお勧めします。確かに @Transactional アノテーションをインターフェイス (またはインターフェイス メソッド) に配置できますが、これはインターフェイス ベースのプロキシを使用している場合に期待どおりにしか機能しません。

後で彼らは、クラスベースのプロキシやアスペクト ウィービングを使用している場合は機能しないと説明しています。

于 2013-05-26T18:51:34.100 に答える