【问题标题】:spring mvc tag configurationspring mvc标签配置
【发布时间】:2013-06-01 10:24:36
【问题描述】:

1、在spring 3.0文档中,关于mvc:annotation-driven是:

“这个标签注册了 Spring MVC 将请求分发到 @Controllers 所需的 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter bean。”

但我没有将这个标签注入到任何 spring 配置文件中,我确信这一点。
那么为什么我的应用可以在没有它的情况下向@Controllers 发送请求呢?

2、mvc:default-servlet-handler 被注入到我的应用程序中处理静态资源后,所有控制器都不起作用,只是在网页上出现 404 未找到错误,但静态资源很好。

我搜索了一下,发现可能是 mvc:annotation-driven 丢失了。

不幸的是,在添加 mvc:annotation-driven 后,自定义拦截器停止工作。 这是拦截器定义:

<bean id="currentMemberInterceptor"  class="com.skill.common.CurrentMemberInjectionInterceptor" />

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
    <property name="interceptors">  
        <list>
            <ref bean="currentMemberInterceptor" />
        </list>  
    </property>  
</bean>

如果拦截器定义更改为 mvc 标签,则拦截器可以工作,例如:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/" />
        <bean class="com.skill.common.CurrentMemberInjectionInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

阅读弹簧参考后,我无法理解这些标签和关系。

请帮忙,谢谢!

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    问题是,当您不提供任何配置时,Spring 在许多地方使用默认后备配置(默认策略)。

    处理程序映射和适配器也是如此。如果您的应用程序上下文中没有这些,Spring 只会尝试注册一些默认 bean。但是,只要您定义了至少一个匹配类型的 bean,它就不会尝试注册任何默认值,并且您是自己的(如果您考虑一下,这是有道理的)。

    查看DispatcherServlet dependency initialization code 并查看default fallback configuration 以了解默认设置。


    配置名称空间的内部运作有时可能有点神秘。当我不明白某个标签在做什么时,我通常会检查标签处理程序的源代码(这些类的命名约定是"NameOfTheTag"BeanDefinitionParser)。您可以通过检查AnnotationDrivenBeanDefinitionParser&lt;mvc:annotation-driven /&gt; 后面的类)自己尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2014-06-08
      • 2011-01-08
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多