【问题标题】:Spring MVC Context HierarchySpring MVC 上下文层次结构
【发布时间】:2013-05-23 20:55:41
【问题描述】:

这可能是一个简单的问题,但我很难理解 Spring MVC 如何处理 MVC 应用程序中经常出现的多个层次结构。

在我的 web.xml 中,我有一个上下文定义为 我的理解是,这是 Root Context

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

我还在 servlet 级别定义了一个上下文,我理解它应该从上面的根上下文中继承。

<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" />

我的问题是,如果我仅在根上下文中将组件扫描更改为以下内容并从 servlet 上下文中删除组件扫描,为什么应用程序拒绝加载?

<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 

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    因为 servlet-context 找不到任何控制器,所以 root-context 和 servlet-context 是分开加载的

    【讨论】:

    • 我认为 servlet 上下文是根上下文的子上下文,可以看到那里定义的任何内容。它当然可以看到我的服务类、daos 等,否则自动装配会失败。
    • 是的,但根上下文不扫描注释(@controller、@RequestMapping ...)。 正在当前组件扫描中寻找那些注解
    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2016-09-06
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多