在 Servlet 3.0标准中含有一个 ServletContainerInitializer接口,所有实现了这个接口的类会在容器启动的时候得到一个通知,并且会调用其 onStartup()方法,这个接口非常简单,只有一个 onStratup()方法

package javax.servlet;
 
import java.util.Set;
 
public interface ServletContainerInitializer {
 
void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException;
}

Spring中提供了一个 SpringServletContainerInitializer类,实现了这个接口

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
 
@Override
public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
throws ServletException {
 
// logic
}
}

此处代码省略了onStratup()方法中的逻辑。可以看到Spring中的这个类实现了 ServletContainerInitializer接口,并且这个类使用了一个 @HandlesTypes注解进行标注,这个注解也是源自于Servlet规范中,它接受一个WebApplicationInitializer类型作为参数。这表示,当容器启动时,会到应用程序中搜索所有实现或继承了 WebApplicationInitializer类型的类,并且将这些类作为参数传递给 SpringServletContainerInitializer.onStratup()方法

而在SpringServletContainerInitializer.onStratup()的逻辑中,会调用所有被传入的 WebApplicationItializer类型的 onStartup()方法。

根据上面的类继承体系,应该能够很明确的看出来,我们在配置SpringMVC时所编写的初始化类都是继承自 AbstractAnnotationConfigDispatcherServletInitializer类,它会继承父类的 onStartup()方法,同样的我们的配置类也就继承了父类的onStartup()方法,当容器启动时,就会调用这个 onStartup()方法。

而为了简化配置,父类中实现了一系列的配置方法,都会在 onStartup()方法中进行调用,因此我们在编写自己的初始化类时,只需要重写相应的配置方法即可。

因此想要知道SpringMVC初始化有哪些可以配置的项,只需要查看这个类继承体系中提供了哪些配置功能的接口即可。

SpringMVC——Servlet容器启动时初始化SpringMVC应用的原理的更多相关文章

  1. SpringMVC原理解析-Servlet容器启动时初始化SpringMVC应用的原理

  2. Docker容器启动时初始化Mysql数据库

    1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案 ...

  3. Servlet容器启动过程

    参考:https://blog.csdn.net/fredaq/article/details/9366043 一.概念 所谓Servlet容器其实说白了是符合Servlet规范的Java web容器 ...

  4. Spring在Web容器启动时执行初始化方法

    需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法 ...

  5. Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...

  6. SpringBoot 源码解析 (三)----- Spring Boot 精髓:启动时初始化数据

    在我们用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求 ,针对这种需求 spring boot为我们提供了以下几种方案供我们选择: ApplicationRunn ...

  7. 运行docker容器镜像2(指定容器启动时启动的脚本)

    docker中启动容器有以下两种情况. 第一种是通过 # docker run containerid 启动一个容器. 第二种是重新启动已经关闭的容器. # docker start containe ...

  8. spring 在web容器启动时执行初始化方法

    开发框架:spingMVC+myBatis 解决方案:给web容器添加一个Listener类,在容器启动的时候执行Listener的“初始化”方法,在这个初始化方法中执行查询数据库的所有操作,然后将数 ...

  9. Servlet在启动时加载的tomcat源码(原创)

    tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...

随机推荐

  1. Linux系统目录结构和文件基本属性

    一.Linux系统目录结构 二.Linux 文件基本属性 三.touch stat tar 命令 一.Linux系统目录结构 不同颜色文件的含义: inux 文件颜色的含义,蓝色代表目录,绿色代表可执 ...

  2. 使用docker compose部署服务

    谈到微服务的话题,技术上我们往往会涉及到多服务.多容器的部署与管理. Docker 有三个主要的作用:Build, Ship和Run.使用docker compose我们可以在Run的层面解决很多实际 ...

  3. centos7.3安装mysql5.7

    一.写随笔的原因:最近在阿里云上买了个centos7.3服务器,想将一些demo运行在上面,所以需要做一些环境的安装,通过此篇文章MAKR一下.下面来记录下安装步骤(参考网上的一些教程,有坑的话会实时 ...

  4. current status of the installation and the internationalization of Samba 3.0

    Only about 8 months from release of Samba 3.0.0, there is beginning to be the transition from 2.2.x. ...

  5. electron api sendInputEvent 源码

    electron-master\electron-master\shell\browser\api\atom_api_web_contents.cc // Copyright (c) 2014 Git ...

  6. CNN for NLP

    卷积神经网络在自然语言处理任务中的应用.参考链接:Understanding Convolutional Neural Networks for NLP(2015.11) Instead of ima ...

  7. AngularJS实现数据列表的增加、删除和上移下移等功能实例

      转: http://www.jb51.net/article/91991.htm 这篇文章给大家分享了AngularJS循环实现数据列表的增加.删除和上移下移等基础功能,对大家学习AngularJ ...

  8. Java一棵树之001线程

    一.理解浓缩 线程是计算机cpu调度的最小的单位,并且jvm中的线程和机器中的线程是一一对应的,在现代编程中,很多时候为了充分利用机器资源而使用多线程,当然很多时候工作中并未使用线程,还是根据场景来选 ...

  9. 对bloom的理解 及优化

    varying uv放到vs 讲下bloom的细节 上图这种做法 temporally stable box filtering up 的时候 需要filter 上述upscale有两张srv dow ...

  10. 关于.Net中Process和ProcessStartInfor的使用

    本文主要是介绍在.Net中System.Diagnostics命名空间下Process类和ProcessStartInfo类的使用 用于启动一个外部程序所使用的类是Process,至于ProcessS ...