美文网首页
Spring启动流程

Spring启动流程

作者: ythmilk | 来源:发表于2018-07-13 14:39 被阅读24次
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
      </context-param>
      <!-- Spring监听器 -->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    

    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。
    011528042224276.png

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


    相关文章

      网友评论

          本文标题:Spring启动流程

          本文链接:https://www.haomeiwen.com/subject/lwbjpftx.html