4

データベースのロールバックに Springs @Transactional を使用するメソッドがあります。次のようにトランザクションマネージャーを定義すると、正常に機能します。

    <tx:annotation-driven transaction-manager="txManager" mode="proxy" />

しかし、変更するmode="aspectj"と、メソッドが例外をスローしてもロールバックしません。

2 つのモードの使用方法に違いはありますか?

4

1 に答える 1

1

「aspectj」モードは、ロード時ウィービングまたはコンパイル時ウィービングが有効になっている場合にのみ機能します。そうでない場合、@Transactionalアノテーションはアノテーション付きメソッドに適用されません。

privateデフォルトのプロキシ モードを使用してメソッドに注釈を付けることはできません。ここでaspectjモードが役立ちます。特定のフレームワーク (Web サービス用の W2O など) では、クラス タイプ自体が機能する必要があります。クラスがプロキシ クラス ラッパーでラップされているため、プロキシ モードを使用すると、これが不可能になる場合があります。これは、 を使用するもう 1 つの理由ですAspectJ

publicメソッドが使用され、特別なフレームワークの制限がない場合は、プロキシ モードで十分です。

関連項目:トランザクション管理

于 2013-07-16T10:54:12.870 に答える