Spring加载机制

启动过程
  在一个基于springmvc的web应用中,需要有一个web容器,一般我们用tomacat,这个web容器提供了一个全局的上下文环境ServletContext,同时也是Spring IoC容器的宿主环境。
宿主容器启动时,其入口文件便是web.xml。web.xml需要定义两个最基本的内容,ContextLoaderListener和DispatcherServlet。


1、ContextLoaderListener是实现了ServletContextListener接口的监听器,在项目启动的时候会触发容器初始化方法contextInitialized,容器初始化方法主要做3个事情
(1)执行initWebApplicationContext方法,启动一个上下文 WebApplicationContext 的接口类,其实现类为XmlWebApplicationContext(即传说的IOC容器)。

<!-- 定义监听器,监听项目的启动和关闭,执行对应的方法 --> 
<listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener> 

(2)根据配置路径加载spring文件创建Bean的实例,这些bean都放入XmlWebApplicationContxt容器中。

<!-- 加载Spring配置文件 -->  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>  
    classpath:spring-context*.xml  
    </param-value>  
</context-param>

(3)将加载好Bean实例的WebApplicationContext按指定的key注册到ServletContext(Java Web全局变量宿主容器)容器中去

2、contextLoaderListener监听器监听容器初始化完成之后,开始初始化web.xml中配置的Servlet(可以配置多个),springmvc中以DispatcherServlet为例。DispatcherServlet,前端控制器,也可以叫请求分发控制器,用来接收、匹配、处理、转发每个servlet请求。DispatcherServlet会以WebApplicationServlet作为自己的parent上下文,然后再初始化自己的上下文。DispatcherServlet初始化上下文主要包括处理器映射器,处理器适配器,视图解析器等。最后再将初始化完成的Servlet注册到ServletContext中,这样每个Servlet都可以持有自己的上下文,同时又能共享根上下文,即IOC容器上下文WebApplicationContext。

<servlet>  
    <servlet-name>spring3mvc</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <init-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
        classpath:spring-mvc*.xml  
        </param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
</servlet>

--------------------------------------------------------------------------------------

【1】https://zhuanlan.zhihu.com/p/62979297

【2】https://blog.csdn.net/u011246915/article/details/82716009

【3】https://segmentfault.com/a/1190000012887776

原文地址:https://www.cnblogs.com/Jomini/p/13785630.html