营销型网站的建设软文/电脑培训班多少费用
前言
在Spring Xml和JavaConfig一文中曾经使用实现WebApplicationInitializer
的方式举例过, 但未对其进行特殊说明, 这里补充一下:
- 一个应用中可以有多个
WebApplicationInitializer
实例, 但加载顺序不定 - 可以使用抽象类继承
WebApplicationInitializer
的方式预置一些逻辑 Spring
提供了一些抽象启动类, 默认注册了名为dispatcher
的Servlet
, UML如下:
然后暴露抽象方法用于注册Spring Context
.- Spring只提供了注解方式的初始化抽象类, 我们可以仿照其编写
XML
方式的初始化抽象类:import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.XmlWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.ServletContext; import javax.servlet.ServletRegistration;public abstract class AbstractXmlWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext container) {XmlWebApplicationContext context = new XmlWebApplicationContext();context.setConfigLocation(getConfigLocation());context.setConfigLocations(getConfigLocations());ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(context));dispatcher.setLoadOnStartup(1);dispatcher.addMapping("/");}protected abstract String getConfigLocation();protected abstract String[] getConfigLocations(); }
- 如果项目之前是通过
web.xml
方式配置, 而又须要在其基础上进行增强配置, 比如开启异步请求支持, 可以这样:import org.springframework.web.WebApplicationInitializer;import javax.servlet.ServletContext; import javax.servlet.ServletRegistration;import static org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.DEFAULT_SERVLET_NAME;public class MyWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext container) {ServletRegistration servletRegistration = container.getServletRegistration(DEFAULT_SERVLET_NAME);if (servletRegistration instanceof ServletRegistration.Dynamic) {((ServletRegistration.Dynamic) servletRegistration).setAsyncSupported(true);}} }