[解決済み】Springの@Transactional属性はprivateメソッドで機能するか?
2022-04-05 09:11:46
質問
もし トランザクショナル -アノテーションは何らかの効果を持つのでしょうか?
もし
@Transactional
アノテーションが public メソッドにある場合、それが動作してトランザクションが開かれます。
public class Bean {
public void doStuff() {
doPrivateStuff();
}
@Transactional
private void doPrivateStuff() {
}
}
...
Bean bean = (Bean)appContext.getBean("bean");
bean.doStuff();
解決方法は?
問題は、プライベートかパブリックかではなく、どのように呼び出すか、どのAOP実装を使用するかです。
もし(デフォルトの)Spring Proxy AOPを使用する場合、Springが提供するすべてのAOP機能(例えば
@Transactional
は、プロキシを経由して呼び出された場合のみ、考慮されます。-- これは通常、アノテーションされたメソッドが
別の
ビーンになります。
これには2つの意味がある。
-
プライベートメソッドは他のBeanから呼び出してはならないので(例外はリフレクション)、その
@Transactional
アノテーションは考慮されません。 - メソッドがpublicであっても、同じBeanから呼び出された場合は、それも考慮されません(この記述は、(デフォルトの)Spring Proxy AOPが使用されている場合のみ正しいです)。
参照 Springリファレンス。第9.6章 9.6 プロキシの仕組み
IMHOでは、Spring Proxiesの代わりにaspectJ modeを使用することで、この問題を克服することができます。そして、AspectJのTransactional Aspectsは、プライベートメソッドにも織り込まれています(Spring 3.0で確認済み)。
関連
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] Spring の @Autowired フィールドが NULL になっているのはなぜですか?
-
[解決済み] Transactionalアノテーションはどこに属しますか?
-
[解決済み] Springのオートワイヤリングの仕組みは?
-
[解決済み】Spring - @Transactional - バックグラウンドで何が起こっているのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] アニメーションGIFの表示
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] init-paramとcontext-param
-
[解決済み] Javaでdoubleをfloatに変換する