1

これはおそらく単純な質問ですが、Spring MVC が MVC アプリケーションにしばしば存在する複数の階層をどのように処理するかを理解するのに苦労しています。

私のweb.xmlには、コンテキストが次のように定義されています。私の理解では、これはルートコンテキストです

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/spring/root-context.xml
    </param-value>
</context-param>

また、サーブレット レベルで定義されたコンテキストもあります。これは、上記のルート コンテキストから been を継承する必要があることを理解しています。

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

私のアプリを機能させるために、root-context.xml に次のものがあります。

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

および servlet-context.xml の以下

<annotation-driven />
<context:component-scan base-package="com.demo.controller" />

私の質問は、ルート コンテキストのみでコンポーネント スキャンを次のように変更し、サーブレット コンテキストからコンポーネント スキャンを削除すると、アプリがロードを拒否するのはなぜですか?

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

Annotation-specified bean name 'adminController' for bean class [com.demo.controller.AdminController] conflicts with existing, non-compatible bean definition of same name 
4

1 に答える 1

0

サーブレットコンテキストはコントローラを見つけられないため、ルートコンテキストとサーブレットコンテキストは別々にロードされます

于 2013-05-24T02:19:31.623 に答える