首先我們會想一下,我們在進行SpringMVC配置的時候是怎樣配置的(不是web.xml)?我們會在SpringMVC的配置檔案中添加這樣的一些東西:
然後再配置一下:
就可以進行簡單的Web開發工作了。那麼Spring、SpringMVC架構是怎麼做的呢?
我們注意到在SpringMVC工程的META-INF下面有spring.handlers和spring.schemas這兩個檔案

如果是jar包的話,則目錄結構是這樣的。
我們可以看看這兩個檔案中的内容是什麼:
spring.handlers:
spring.schemas:
這兩個檔案中的key看起來是不是很熟悉?看看檔案開頭的内容。Spring在對配置檔案進行解析的時候會讀取META-INF/spring.handlers這個檔案來擷取一個org.springframework.beans.factory.xml.NamespaceHandler的實作類。這個解析過程比較複雜,我們先不展開的(想了解的可以先看一下這個方法:org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver#resolve),你隻需要記住Spring在解析xml配置檔案的時候可以讀取到org.springframework.web.servlet.config.MvcNamespaceHandler這個類就行了。我們先看一下NamespaceHandler這個類的UML類圖:
在上面這張圖中我們不僅看到了MvcNamespaceHandler、還有AopNamespaceHandler、TxNamespaceHandler、ContextNamespaceHandler等等(套路都是一樣的)。spring.schemas中的xsd檔案描述了xml文檔的一些資訊,比如有哪些根節點、根節點下面有哪些子節點、有哪些屬性資訊、資料類型等等。我們先來看一下MvcNamespaceHandler這個類的内容:
在這個方法中注冊了很多的BeanDefinitionParser,,而<mvc:annotation-driven/>這個标簽是通過AnnotationDrivenBeanDefinitionParser這個類來解析的。這個類中我們要分析的重點就是parse這個方法,在後面的文章中我們會挑一些重點的地方來分析一下這個parse方法中的内容。