Spring のプライベート メソッドに対するトランザクション属性の有効性
Spring 内では、@Transactional アノテーションによりメソッドのトランザクション境界の境界設定が可能になります。 Spring Bean 内のプライベート メソッドにこのアノテーションを適用した場合の有効性に関して、一般的な質問が生じます。
答えは簡単です。@Transactional はプライベート メソッドには影響しません。これは、Spring で採用されているプロキシ ジェネレーターがプライベート メソッドを無視しているためです。
さらに明確にするために、次の例を考えてみましょう:
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { } }
プライベート メソッド doPrivateStuff() に @Transactional アノテーションがあるにもかかわらず、効果がないままであり、トランザクションの動作は変更されません。この動作は Spring マニュアルの第 10.5.6 章に文書化されており、次のように明示的に記載されています。
「プロキシを使用するときは、パブリック可視性を持つメソッドにのみ @Transactional アノテーションを適用する必要があります。プロテクトされたアノテーションを行う場合は、プライベートまたは @Transactional アノテーションが付いているパッケージに表示されるメソッドを使用すると、エラーは発生しませんが、アノテーションが付けられたメソッドには構成されたトランザクション設定が表示されません。必要に応じて、AspectJ の使用を検討してください。非パブリックメソッドに注釈を付けるため。"
以上がSpring の @Transactional アノテーションはプライベート メソッドでも機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。