Spring启动流程

  
    contextConfigLocation
    classpath:spring-mybatis.xml
  
  
  
    org.springframework.web.context.ContextLoaderListener
  

ContextLoaderListener是一个实现了ServletContextListener接口的监听器,在启动项目时会触发contextInitialized方法(该方法主要完成ApplicationContext对象的创建),在关闭项目时会触发contextDestroyed方法(该方法会执行ApplicationContext清理操作),由该监听器创建并初始化IOC容器

该监听器,默认读取/WEB-INF/下的applicationContext.xml文件。但是通过context-param指定配置文件路径后,便会去指定的路径下读取对应的配置文件,并进行初始化。

ServletContextListener:用于接收关于ServletContext生命周期更改的通知事件的接口

项目启动时触发contextInitialized()方法创建Spring上下文:

    public void contextInitialized(ServletContextEvent event) {
        this.initWebApplicationContext(event.getServletContext());
    }

spring上下文容器配置后,初始化了什么?

  1. servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext
  2. 容器调用web.xml中配置的contextLoaderListener,初始化WebApplicationContext上下文环境(即IOC容器),加载context-param指定的配置文件信息到IOC容器中。WebApplicationContext在ServletContext中以键值对的形式保存
  3. 容器初始化web.xml中配置的servlet,为其初始化自己的上下文信息servletContext,并加载其设置的配置信息到该上下文中。将WebApplicationContext设置为它的父容器。
  4. 此后的所有servlet的初始化都按照3步中方式创建,初始化自己的上下文环境,将WebApplicationContext设置为自己的父上下文环境。初始化完毕后,spring以与servlet的名字相关的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个servlet就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即contextConfigLocation配置的bean。
Spring启动流程_第1张图片
011528042224276.png

对于作用范围而言,在DispatcherServlet中可以引用由ContextLoaderListener所创建的ApplicationContext中的内容,而反过来不行。


你可能感兴趣的:(Spring启动流程)