質問する
1710 次
1 に答える
3
これは通常、メソッドに@Transactionalを設定すると、SpringがそのBeanの動的プロキシを作成するためです。Beanがインターフェイスを実装している場合は、そのインターフェイスに基づいて動的プロキシが作成されます。それ以外の場合は、プロキシの作成にCGLIBが使用されます。
あなたの場合の問題は、おそらくコントローラーを何らかのインターフェースに基づいているか、基本クラスに基づいて拡張しているためだと思います。これにより、そのインターフェイスに基づいてプロキシが作成されることになります。これは、リクエストに対してマッピングを作成するときに、SpringMVCがBeanからマッピングを検出していない可能性があるためです。
修正はいくつかあります:
a。トランザクションのプロキシをCGLIBに基づいて強制することができます。
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
b。ロードタイムウィービングまたはコンパイルタイムウィービングのいずれかで、純粋なAspectjを使用できます。
c。@Transactionalをサービス(インターフェイスを持つ)に移動し、コントローラーからサービスに呼び出しを委任できます。これにより、コントローラーでの@Transactionを回避できます。
于 2012-08-10T12:42:32.820 に答える