这几天在看spring的源码,涉及到spring启动位置的部分,下面就看看spring到底是从哪儿开始加载的。本文使用的是spring3.0M3
首先spring的加载会借助一个监听器ContextLoaderListener,直接上web.xml文件
Xml代码
1.<listener>
2. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
3.</listener>
我们通常会对加载位置统一管理
Xml代码
1.<context-param>
2. <param-name>contextConfigLocation</param-name>
3. <param-value>
4. /WEB-INF/conf/spring/**/*.xml
5. </param-value>
6. </context-param>
这个org.springframework.web.context.ContextLoaderListener类型是springframework中的原始加载上下文的监听器,
通常我们会自定义一个Listener去继承ContextLoaderListener并另外实现我们需要初始化的接口(通常我们会选择实现一些接口来对session的管理)
Java代码
1.public class FrameServletContextListener extends ContextLoaderListener implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener {
2. //
3. private ServletContext initPath(ServletContextEvent event) {
4.
5. }
6.
7. public synchronized void contextDestroyed(ServletContextEvent event) {
8. //
9. }
10.
11. ...
12.}
当监听器设置好了之后 ,启动web容器 监听器开始启动ContextLoaderListenerl
类中的方法contextInitialized()
Java代码
1./**
2. * Initialize the root web application context.
3. */
4.public void contextInitialized(ServletContextEvent event) {
5. this.contextLoader = createContextLoader();
6. if (this.contextLoader == null) {
7. this.contextLoader = this;
8. }
9. this.contextLoader.initWebApplicationContext(event.getServletContext());
10.}
这样this.contextLoader.initWebApplicationContext(event.getServletContext());ContextLoaderListener
就会借助容器的上下文去初始一个spring的应用上下文,使用到了ContextLoader这个类
在ContextLoader初始化时我们看到这样一块static代码
Java代码
1.static {
2. // Load default strategy implementations from properties file.
3. // This is currently strictly internal and not meant to be customized
4. // by application developers.
5. try {
6. //这一句会去加载同在此包下的一个properties文件的值(ContextLoader.properties)
7. ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, ContextLoader.class);
8. defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
9. }
10. catch (IOException ex) {
11. throw new IllegalStateException("Could not load 'ContextLoader.properties': " + ex.getMessage());
12. }
13.}
属性文件中这样定义
引用
org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext
这样我们就能根据属性文件中的定义反射出一个XmlWebApplicationContext上下文了
然而我们在XmlWebApplicationContext中看到如下变量
Java代码
1./** Default config location for the root context */
2.public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
至此我们已经知道默认加载spring文件的启动位置了
当我们再看ContextLoader类,我们就会看到传说中的参数contextConfigLocation
Java代码
1.public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";
而XmlWebApplicationContext对象正是调用了这个参数去设置启动位置
Java代码
1.wac.setConfigLocation(servletContext.getInitParameter(CONFIG_LOCATION_PARAM));
再往上看XmlWebApplicationContext继承的AbstractRefreshableConfigApplicationContext类中的setConfigLocation方法将此抽象类中的String[] configLocations值填充
并在AbstractRefreshableConfigApplicationContext类中我们看到spring对默认启动文件位置和配置启动文件位置的支持
Java代码
1.protected String[] getConfigLocations() {
2. return (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());
}
至此我们已经清楚spring将从哪儿加载并知道加载哪些文件了。
分享到:
相关推荐
Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和依赖倒置原则的应用。 IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从...
本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...
springioc加载流程图.pdf
博文链接:https://eastpoint.iteye.com/blog/78983
在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...
Spring Boot是一款快速开发框架,它简化了Java应用的创建、配置和部署过程,极大地提高了开发效率。在开发过程中,为了实现快速迭代和测试,热加载技术变得至关重要。SpringLoaded是Spring Boot热加载的核心组件,它...
Spring Bean 加载过程源码解析文档 Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责...
SpringSecurity加载流程图 SpringSecurity系统启动流程 SpringSecurity调用流程
Spring 简单容器中的 Bean 基本加载过程 Spring 框架是 Java 企业级应用程序的核心框架之一,它提供了一个 IOC(Inverse of Control,控制反转)容器,用于管理应用程序中的对象。Spring IOC 容器的核心是 ...
本文将详细分析Spring通过classpath加载配置文件的不同情形,并提供解决加载过程中可能遇到的问题的方法。 首先,我们来看一下Spring加载配置文件的基本方式。在Spring中,可以通过ApplicationContext接口的实现类...
当我们构建一个基于Spring的应用时,经常需要从jar包中加载配置文件,以便管理依赖注入和其它服务。在Spring中,我们通常使用`classpath:`或`classpath*:`前缀来指定资源的位置。这两个前缀在处理多个类路径位置时有...
2. **Bean的加载过程** - 当Spring容器启动时,它首先读取配置文件,解析Bean的定义,并创建一个BeanDefinition对象,该对象包含了Bean的所有信息,如类名、属性、依赖等。 - 如果有`@Component`注解的类,Spring...
"Spring+mvc+mybatis Mapper xml自动加载"这个主题聚焦于如何在开发过程中优化配置,使得改动Mapper XML文件后,无需重启Tomcat服务器,就可以立即生效,从而提高开发效率。 Spring MVC是Spring框架的一部分,它...
Spring加载XML配置文件的过程分为几个步骤: 1. **定位配置文件**:根据提供的路径找到XML配置文件。 2. **解析XML文件**:使用DOM或SAX解析器将XML内容转换为内存中的对象结构。 3. **构建BeanDefinition**:从解析...
在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...
在Spring Boot应用中集成MyBatis作为持久层框架时,我们常常希望在开发过程中能够实现XML映射文件的热加载,以便在修改了SQL语句后无需重启应用就能看到效果。这种热加载功能能显著提高开发效率。下面将详细介绍如何...
整理了一下spring的加载, 个人对于Spring的流程的理解,望多多指正
1. 认证流程: a. 请求到来时,Spring Security框架首先会通过一系列的过滤器来处理HTTP请求。每个过滤器都扮演着特定的角色,共同完成认证和授权的过程。 b. 过滤器链中的第一个关键过滤器是...