繁体   English   中英

Spring MVC标签配置

[英]spring mvc tag configuration

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

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

但我没有将此标签注入任何spring配置文件中,对此我确信。
那么为什么我的应用程序可以在没有该请求的情况下将请求调度到@Controllers?

2,将mvc:default-servlet-handler注入我的应用程序以处理静态资源后,所有控制器都无法正常工作,只是在网页上找不到404错误,但静态资源没问题。

我发现它可能是由mvc:annotation驱动的

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

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

请帮助,谢谢!

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

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

请参阅DispatcherServlet依赖项初始化代码,并检查默认的后备配置以查看默认值。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM