独自のクラス内での Spring @Transaction メソッド呼び出しが失敗する
Spring Framework の宣言型トランザクション管理は、メソッド レベルでトランザクションの動作を定義する便利な方法を提供します。ただし、同じクラス内からトランザクション メソッドを呼び出そうとすると、一見奇妙な問題が発生します。
問題
提供されたコード スニペットでは、addUser メソッドは次のようになります。 @Transactional の注釈が付けられており、データベース操作を実行するように設計されています。 addUsers メソッド内で、ユーザーごとに addUser を呼び出そうとします。ただし、意図したとおりに動作していないようです。
原因
この動作は、特に Spring AOP (アスペクト指向プログラミング) の制限によるものです。動的オブジェクトと CGLIB ライブラリを使用する場合。 CGLIB は、AOP のメソッド インターセプトを実装するために既存のクラスのサブクラスを作成します。この場合のように、メソッドが作成されたのと同じクラス内でメソッドが呼び出される場合、AOP プロキシはバイパスされます。
解決策
この問題を解決するには、いくつかの可能なアプローチがあります:
結論
Spring AOP の制限を理解し、同じクラス内からトランザクション メソッドを呼び出すための適切なソリューションを見つけることは、効果的なトランザクション管理には不可欠です。春のアプリケーション。この記事で説明する代替アプローチは、この特定のハードルを克服する方法を提供します。
以上が同じクラス内で呼び出すと Spring @Transactional メソッドが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。