2

Spring MVCを使用して Spring Bean を REST のようなチャネルにバインドするWeb アプリケーションを作成しています。

以前のアプリ (純粋な XML 構成) と<mvc:annotation-driven/>機能を使用した例の両方で基本的な構成を作成しました。<context:component-scan base-package="my.package"/>spring xml ファイルでコントローラーを含むパッケージを指しています。

Spring 3.0.6.RELEASEで動作しています。しかし、3.1.0.RELEASEにアップグレードした後、コントローラーが検出されなくなり、チャンネルが登録されませんでした。HelloChannelSpring コンテキストには、インターフェースの実装が含まれていません。

これはこの Spring バージョンのバグですか、それとも新しいバージョンではサポートされなくなった非推奨の構成を使用していますか? エラーや警告は表示されませんでした。単純に Bean が自動検出されませんでした。

コントローラ インターフェイスの定義は次のようになります。

@RequestMapping("/config") public interface ConfigChannel

そして実装:

@Controller
public class ConfigChannelImpl implements ConfigChannel
4

1 に答える 1

2

Spring のドキュメントでは、インターフェイス ベース@Controllerの s はトランザクション メソッドをプロキシするためのものであることが示されています。そのため、おそらく<tx:annotation-driven />タグを使用しています。現在抱えている問題は、Spring 3.1 がランタイムベースのバイトコード マニピュレーターである CGLIB のサポートを導入したことです。proxy-target-class="true"トランザクション構成に追加し、CGLIB をクラスパスに追加する必要があります。

<tx:annotation-driven proxy-target-class="true" />

http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/mvc.html#mvc-ann-requestmappingから

于 2011-12-29T14:29:48.853 に答える