0

私のアプリケーションは次のように正しく実行されています:

<context:component-scan base-package="com.mypackage">  </context:component-scan>

これを手動の Bean 定義に置き換えると、コントローラーが検出されなくなります。

いずれの場合でも、これらの注釈を使用しています:

<context:annotation-config />
<mvc:annotation-driven />

コントローラーの自動配線されたメソッドが呼び出されますが、Bean はエントリポイントとして宣言されていないため、404 エラーが発生し、アクセスできません。

コンポーネントスキャンの背後にある黒魔術とは?

コントローラーは次のように宣言されます。

<?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Controller configuration -->
    <bean class="com.xx.ControllerClass" />

</beans>
4

1 に答える 1

3

コメントに基づく推測 - applicationContext-controllers.xml ファイルでコントローラーの Bean を宣言しました。このファイルは、DispatcherServlet web.xml ファイルで宣言する Web アプリケーションのコンテキスト ファイルにインポートされます。

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/applicationContext-controller.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet> 

そうでない場合は、おそらくそれが問題です。通常、Spring MVC ベースのアプリケーションには 2 つの異なるアプリケーション コンテキストがあります。1 つは ContextLoaderListener (ルート Web アプリケーション コンテキスト) を使用して宣言するものであり、DispatcherServlet、コントローラーmvc:annotation-drivenなどを介して宣言された Web 関連 Bean は、Web 関連 Bean 宣言に含まれる必要があります。 .

于 2012-07-10T20:27:36.070 に答える