@Transactional アノテーションを介して Spring 宣言型トランザクションを既存の Java プロジェクトに追加しようとしています。
問題が発生したとき (この質問とは関係ありません)、完全なデバッグ ログをオンにしました。不思議なことに、私は次のことに気付きました。
17:47:27,834 DEBUG HibernateTransactionManager:437 - Hibernate トランザクションのスレッドにバインドされたセッション [org.hibernate.impl.SessionImpl@10ed8a8e] が見つかりました 17:47:27,845 DEBUG HibernateTransactionManager:470 - 既存のトランザクションに参加しています 17:47:27,865 DEBUG AnnotationTransactionAttributeSource:106 - 次の属性を持つトランザクション メソッド 'updateUserProfile' を追加します: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; '' 17:47:27,875 DEBUG AnnotationTransactionAspect:321 - トランザクション マネージャーが構成されていないため、トランザクション ジョインポイント [se.myservice.UserService.updateUserProfile] をスキップしています
いくつかのデバッグの後、最初の 3 つのログ エントリ (スレッド バインド セッションが見つかり、そのトランザクションを使用している) が UserService クラスの JdkDynamicAopProxy によって生成されていることがわかりました。
ただし、最後のログ メッセージは驚くべきものに見えます。メソッド実行前のジョインポイントで呼び出されます。AnnotationTransactionAspect のソースを見ると、トランザクション マネージャーが設定されていない場合にこのメッセージが生成されます。この場合、Spring はこの側面で依存性注入を実行しないためです。
私には、トランザクションの 2 つの異なる「スタイル」が適用されているように見えます: 動的プロキシとアスペクトです。私が持っている唯一のトランザクション関連の構成は次のとおりです。
<tx:annotation-driven transaction-manager="txManager" />
プロジェクトで AspectJ を使用していますが、aop.xml に AnnotationTransactionAspect アスペクトが登録されていません。Spring 3.0.2.RELEASE を使用しています。
私はこれに警戒すべきですか?Spring はこの側面を登録しますか? annotation-driven
AspectJ を使用する場合は使用しないでください。