2013-06-05 202 views
0

1,在弹簧3.0文档,约MVC:注解驱动是:弹簧MVC标签配置

“该标签登记所需要的弹簧MVC调度请求@Controllers的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter上豆类。 “

但我没有注入这个标签到任何弹簧配置文件,我相信这一点。
那么为什么我的应用程序可以将请求发送到@Controllers而没有?

2,之后mvc:默认servlet处理程序被注入到我的应用程序来处理静态资源,所有的控制器不工作只是404在网页上没有找到错误,但静态资源是好的。

我goolged它发现,也许一个mvc:注释驱动失去。

不幸的是,在mvc:注释驱动的添加后,自定义拦截器停止工作。 这里是拦截器的定义:

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

我不能让这些标签的意义和关系阅读后春参考。

plz帮助,谢谢!

回答

0

事情是,当你不提供任何配置时,Spring会在许多地方使用默认回退配置(默认策略)。

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

请参阅DispatcherServlet dependency initialization code并检查default fallback configuration以查看默认值。


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

+0

谢谢Pavel你说得对,我会检查源代码 – rock