1. 程式人生 > >Spring MVC 零配置

Spring MVC 零配置

只有一個 col 純粹 相同 如果 http 註冊 name 指定

1. pring MVC的核心就是DispatcherServlet類,Spring MVC處理請求的流程如下圖所示:

技術分享

2. Spring MVC中典型的上下文層次

技術分享

當我們初始化一個DispatcherServlet類時,Spring MVC會在web應用的WEB-INF目錄下查找一個名字叫:[servlet-name]-servlet.xml的配置文件,查詢這個文件中定義的bean並初始化。[servlet-name]-servlet.xml的定義的bean初始化時將會覆蓋在全局範圍內(global scope)定義的相同名稱的bean。我們一般會在web.xml中定義DispatcherServlet。由上圖我們可以看出Controller、HandlerMapping、ViewResovler類在Servlet WebApplicationContext中定義,而Services類,Repositories類(中間服務、數據源等)在Root WebApplicationContext中定義。

3. Spring MVC中單個的根上下文(Single Root Contexct)

技術分享

如果只有一個單一個根上下文,這樣我們就可以定義一個空的contextConfigLocation,因此所有的beans就要在這這個單一的Root Context中定義了。

4. 如何不再要web.xm和[servlet-name].servlet.xml而采用純粹的java類來實現?

技術分享

從上圖中我們可以看出只要繼承了AbstractAnnotationConfigDispatcherServletInitializer類即可實現在Servlet容器中註冊Servlet WebApplicationContext和Root WebApplicationContext。

4.1.將 DispatcherServlet 配置在 Servlet 容器中而不再使用 web.xml 。

public class RtpFrontWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 指定 Root WebApplicationContext 類,[email protected],從而代替XML配置文件
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        
return new Class<?>[]{RootConfig.class}; } /** * 指定 Servlet WebApplicationContext 類,[email protected],從而代替XML配置文件 */ @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebConfig.class}; } /** * 指定 Servlet mappings */ @Override protected String[] getServletMappings() { return new String[]{"/"}; } }

Spring MVC 零配置