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