0

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

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

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

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

我搜索它发现可能是一个mvc:annotation-driven Lost。

不幸的是,在添加了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>

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

请帮忙,谢谢!

4

1 回答 1

0

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

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

请参阅DispatcherServlet 依赖项初始化代码并检查默认回退配置以查看默认值。


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

于 2013-06-05T17:03:45.930 回答