2013-06-05 238 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