springIoC容器在web项目中的创建流程

springIoC容器在web项目中的创建流程

创建方式

ApplicationContext接口常用实现类
***ClassPathXmlApplicationContext:
它是从类的根路径下加载配置文件 推荐使用这种
***FileSystemXmlApplicationContext:
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
***AnnotationConfigApplicationContext:
当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解

Web应用中创建IoC容器

web.xml中配置ContextLoaderListener接口,并配置ContextConfigLocation参数
***web容器启动之后加载web.xml,此时加载ContextLoaderListener监听器(实现了ServletContextListener接口,该接口的描述请见下面《三类八种监听器》)
***ContextLoaderListener监听器会在web容器启动的时候,触发contextInitialized()方法。
***contextInitialized()方法会调用initWebApplicationContext()方法,该方法负责创建Spring容器(DefaultListableBeanFactory)。

【Web三类八种监听器】:
***监听域对象的生命周期:
*ServletContextListener:
*创建:服务器启动
*销毁:服务器正常关闭
*spring ContextLoaderListener(服务器启动时负责加载Spring配置文件)
*HttpSessionListener
*创建:第一次访问request.getHttpSession();
*销毁:调用invalidate();非法关闭;过期
*ServletRequestListener
*创建:每一次访问
*销毁:响应结束
***监听域对象的属性:(添加、删除、替换)
* ServletContextAttributeListener
* HttpSessionAttributeListener
* ServletRequestAttributeListener
***监听HttpSession中JavaBean的改变:
* HttpSessionBindingListener(HttpSession和JavaBean对象的绑定和解绑)
* HttpSessionActivationListener(HttpSession的序列化,活化、钝化)

源码分析

  1. web服务器(tomcat)启动会加载web.xml(启动ContextLoaderListener监听器):springIoC容器在web项目中的创建流程
  2. 创建Web环境中的Spring容器springIoC容器在web项目中的创建流程
  3. ContextLoader类中创建Spring容器并初始化容器中的Bean实例。 springIoC容器在web项目中的创建流程
  4. configureAndRefreshWebApplicationContext方法中调用最终初始化Bean的refresh方法
    springIoC容器在web项目中的创建流程
    springIoC容器在web项目中的创建流程