前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Web MVC框架(七) 基于代码的容器初始化

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

作者头像
乐百川
发布2022-05-05 19:46:44
3340
发布2022-05-05 19:46:44
举报

前面我们的Spring项目都是使用XML文件配置的,包括web.xml和Spring配置文件。Spring还支持基于代码的配置,这样我们的Spring程序就可以脱离web.xml文件,全部使用代码来配置。

WebApplicationInitializer接口

第一个接口就是org.springframework.web.WebApplicationInitializer,我们实现该接口,然后在onStartup方法中就可以使用代码来配置Servlet容器和DispatcherServlet了。

代码语言:javascript
复制
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接口是最基本的一个接口,所有的初始化代码都要在接口中实现,比较麻烦。Spring因此提供了一个实现了WebApplicationInitializer接口的基类AbstractDispatcherServletInitializer,使用它我们可以非常方便的配置Servlet容器。需要异步支持的话,如果实现WebApplicationInitializer接口的话需要手动设置异步支持标志位,就像web.xml那样;如果使用AbstractDispatcherServletInitializer基类的话不需要设置,Spring已经默认支持异步处理了。

使用Java配置

如果我们使用Java代码配置Spring的话可以继承AbstractAnnotationConfigDispatcherServletInitializer基类,然后实现其中的三个方法。

代码语言:javascript
复制
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配置

如果我们使用传统XML方式配置Spring,那么就直接继承AbstractDispatcherServletInitializer基类,然后实现其中的三个方法。

代码语言:javascript
复制
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()方法即可。

代码语言:javascript
复制
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    // ...

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

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebApplicationInitializer接口
  • AbstractDispatcherServletInitializer基类
    • 使用Java配置
      • 使用XML配置
        • 过滤器配置
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档