自己看源码总结的不一定准确,记录下来以备以后查看。
1.通过web.xml配置ContextLoaderListener 或者 ContextLoaderServlet 来加载spring.
2.ContextLoaderListener 或者 ContextLoaderServlet 两个类都是调用createContextLoader()方法
new一个ContextLoader 实例。
3.ContextLoader 通过一个static方法:
static { try { ClassPathResource resource = new ClassPathResource( DEFAULT_STRATEGIES_PATH, ContextLoader.class); defaultStrategies = PropertiesLoaderUtils.loadProperties(resource); } catch (IOException ex) { throw new IllegalStateException( "Could not load 'ContextLoader.properties': " + ex.getMessage()); } }
加载默认的策略,spring不建议用户自己定义策略,策略定义在与ContextLoader同一目录下的ContextLoader.properties。注释(Load default strategy implementations from properties file.This is currently strictly internal and not meant to be customized by application developers.)
4.调用ContextLoader的initWebApplicationContext方法。
1)首先判断ServletContext中是否包含WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值这个属性。
2)加载ServletContext的父context,我测试的时候返回的是null.
3)自调用createWebApplicationContext创建根WebApplicationContext。
<1>首先调用determineContextClass判断使用的是默认的XmlWebApplicationContext或者自定义的一个类。
<2>实例化contextClass,并强制转化为ConfigurableWebApplicationContext接口
<3>设置父context,设置servletContext,设置配置文件的位置。
<4>调用refresh(ConfigurableApplicationContext接口中定义,AbstractApplicationContext类中实现)。
4)把context设置到 ServletContext中。属性名:WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
初始化完毕,其中红色部分进行了配置文件的加载.研究中。。。。
//===================================补充说明红色标记部分====================================
#加载配置文件
1.prepareRefresh 准备context进行refresh。准备refresh context,设置他的启动时间和使用状态.
2.obtainFreshBeanFactory 得到刷新后的BeanFactory.
1)首先会调用refreshBeanFactory(真正的加载方法),由子类提供。
AbstractApplicationContext有两个直接子类一个AbstractRefreshableApplicationContext,一个GenericApplicationContext 前者AbstractRefreshableApplicationContext.refreshBeanFactory()(此方法不可以重载)初始化BeanFacotry,后者不支持多次刷新是通过DefaultListableBeanFactory.registerBeanDefinition()注册。
2)调用getBeanFactory()返回ConfigurableListableBeanFactory类型的BeanFactory
3)refreshBeanFactory方法暂时没研究。
3.bean的生命周期开始.
1)prepareBeanFactory(beanFactory);在context中准备BeanFactory使用
2)postProcessBeanFactory(beanFactory);登记BeanPostProcessor
3)invokeBeanFactoryPostProcessors(beanFactory);调用作为bean在context注册的factory processors
4)registerBeanPostProcessors(beanFactory);注册拦截bean创建的BeanProcessors
5)initMessageSource();为本context初始化消息源
6)initApplicationEventMulticaster(); 为context初始化事件的多点传送
7)onRefresh(); 默认是空实现
8)registerListeners();检测监听器bean并且注册他们
9)beanFactory.preInstantiateSingletons();实例化单例允许他们存储信息资源
10)publishEvent(new ContextRefreshedEvent(this));
最后一步:公布对应的事件.实例化一个ContextRefreshedEvent()事件.
分享到:
相关推荐
当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `<listener>`标签...
Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责...
例如,如果你的WAR文件中没有包含必要的Spring JARs或者与应用相关的其他库,那么在启动Web应用时,ContextLoaderListener尝试加载这些类时就会抛出此异常。 解决此类问题的方法通常包括: 1. **检查依赖管理**:...
在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...
《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...
在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供了多种方式来加载 ApplicationContext。 首先,Spring 提供了两种选择来加载 ApplicationContext:ContextLoaderListener 和 ...
4. **启动Web应用时加载Spring配置**:当Web应用启动时,`ContextLoaderListener`监听器会根据`contextConfigLocation`参数读取配置文件,并创建相应的ApplicationContext。 #### 二、Struts配置文件中的Spring集成...
1. **Listener**:首先加载并初始化Listener,以便于配置Spring容器。 2. **Filter**:其次加载并初始化Filter,Filter的加载顺序取决于`filter-mapping`标签的出现顺序。 3. **Servlet**:最后加载并初始化Servlet...
- 在`web.xml`中添加配置,包括加载Spring的配置文件(如`spring-beans.xml`和`spring-security.xml`),分别用于配置业务层和服务层以及安全设置。 - 添加`CharacterEncodingFilter`以处理字符编码问题,确保所有...
在IT行业中,Spring、iBATIS和Struts1是经典的Java Web开发框架,它们的集成应用为开发者提供了灵活且强大的后端服务构建能力。本文将深入探讨这些技术的结合使用,以及它们如何协同工作来创建高效的应用程序。 ...
总之,"web项目整合spring"是一个涵盖多个方面的过程,涉及到Spring框架的核心组件以及Web开发的常规流程。`applicationContext.xml`作为Spring的配置中心,是整个整合过程的关键。理解并熟练掌握这些知识点,对于...
1. **引入依赖**:在项目中添加`spring-webmvc`的jar包,如`spring-webmvc-3.1.1.release-sources.jar`,这个版本包含源代码,便于开发者理解内部实现。 2. **配置DispatcherServlet**:在web.xml中配置...
在基于OSGi和Spring开发Web应用的过程中,首先需要指定Target Platform到所有需要用到的bundle包目录中,这是为了确保开发环境能够识别并正确加载所有必要的组件。接下来,创建一个服务接口bundle,定义接口类及其...
### Spring 加载多个配置文件详解 #### 一、引言 在现代软件开发中,Spring 框架因其强大的依赖注入(DI)和面向切面编程(AOP)能力而备受青睐。尤其在构建大型应用时,为了提高代码的可读性和可维护性,将系统...
当Web应用程序启动时,Tomcat或Jetty等容器会触发此监听器,进而加载Spring的配置信息,创建ApplicationContext,使得Spring框架能够接管应用程序的生命周期管理。 2. **过滤器(Filter)** 过滤器在HTTP请求和...
例如,下面的MyWebApplicationInitializer类实现了WebApplicationInitializer接口,它在onStartup方法中负责加载Spring Web应用配置,并创建并注册DispatcherServlet。 public class MyWebApplicationInitializer ...
1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,通过容器管理对象及其依赖关系,使得代码松耦合,易于测试和维护。 2. **Bean容器**:Spring管理的对象称为Bean,Bean容器负责创建、初始化、...
Spring Boot非Web项目运行的方法 Spring Boot是一个基于Java的开源框架,主要用于构建基于Web的应用程序。然而,在某些情况下,我们可能不需要提供Web服务,例如跑定时任务的项目。在这种情况下,我们需要了解如何...
`@WebAppConfiguration`注解可以指示Spring加载Web应用的配置。 2. **配置测试类**: 在测试类中,我们通常会使用`@ContextConfiguration`注解来指定Spring配置文件的位置,或者使用`@Import`导入所需的配置类。...
### Spring Web集成知识点详解 #### 一、Spring框架概述 **Spring** 是一款开源的Java应用框架,主要用于简化企业级应用程序的...通过这个过程,开发者可以学习如何使用Spring MVC来处理Web请求、管理和渲染视图。