Spring Web MVC框架(七) 基于代碼的容器初始化

前面我們的Spring項目都是使用XML文件配置的,包括web.xml和Spring配置文件。Spring還支持基于代碼的配置,這樣我們的Spring程序就可以脫離web.xml文件,全部使用代碼來配置。

WebApplicationInitializer接口

第一個接口就是org.springframework.web.WebApplicationInitializer,我們實現(xiàn)該接口,然后在onStartup方法中就可以使用代碼來配置Servlet容器和DispatcherServlet了。

import org.springframework.web.WebApplicationInitializer;

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        XmlWebApplicationContext appContext = new XmlWebApplicationContext();
        appContext.setConfigLocation("/WEB-INF/dispatcher-servlet.xml");

        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }

}

WebApplicationInitializer是Spring提供的一個接口,Spring會確保在Servlet容器初始化的時候該接口被自動檢測和使用。

AbstractDispatcherServletInitializer基類

前面介紹的WebApplicationInitializer接口是最基本的一個接口,所有的初始化代碼都要在接口中實現(xiàn),比較麻煩。Spring因此提供了一個實現(xiàn)了WebApplicationInitializer接口的基類AbstractDispatcherServletInitializer,使用它我們可以非常方便的配置Servlet容器。需要異步支持的話,如果實現(xiàn)WebApplicationInitializer接口的話需要手動設置異步支持標志位,就像web.xml那樣;如果使用AbstractDispatcherServletInitializer基類的話不需要設置,Spring已經(jīng)默認支持異步處理了。

使用Java配置

如果我們使用Java代碼配置Spring的話可以繼承AbstractAnnotationConfigDispatcherServletInitializer基類,然后實現(xiàn)其中的三個方法。

public class MyAnnotationWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootApplicationContextConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{DispatcherServletConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

使用XML配置

如果我們使用傳統(tǒng)XML方式配置Spring,那么就直接繼承AbstractDispatcherServletInitializer基類,然后實現(xiàn)其中的三個方法。

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/applicationContext.xml");
        return cxt;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/dispatcher-servlet.xml");
        return cxt;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}

過濾器配置

AbstractDispatcherServletInitializer提供了一個方法用于配置過濾器,只需要重寫getServletFilters()方法即可。

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    // ...

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new CharacterEncodingFilter() };
    }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,959評論 6 342
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 好啦好啦,很好奇點開了,是不是?你猜我在做什么?做愛?不是啦!認真看我昨晚上文章的人都知道,我老公不在家。紅杏出墻...
    楊茗辭閱讀 455評論 26 13
  • 衛(wèi)星數(shù)量有兩種:衛(wèi)星總數(shù)(all),和已校準衛(wèi)星數(shù)(fixed); 衛(wèi)星數(shù)量來源于gps定位數(shù)據(jù),gps數(shù)據(jù)來源又...
    Android澤光閱讀 3,977評論 2 4