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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 前面我们的Spring项目都是使用XML文件配置的,包括web.xml和Spring配置文件。Spring还支持基于代码的配置,这样我们的Spring程序就可以脱离web.xml文件,全部使用代码来配置。

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

WebApplicationInitializer接口

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

使用Java配置

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

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基类,然后实现其中的三个方法。

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() };
    }

}
相关文章
|
7天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
81 44
|
3天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
9 3
|
2天前
|
前端开发 JavaScript 开发工具
从框架到现代Web开发实践
从框架到现代Web开发实践
8 1
|
6天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
14 3
|
6天前
|
缓存 监控 Java
|
7天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
3天前
|
关系型数据库 MySQL API
|
20天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
51 5
|
4天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
6天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
30 1