[英]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.