`
yuchengyang
  • 浏览: 10469 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring默认启动位置以及contextConfigLocation设置源码解析

阅读更多
这几天在看spring的源码,涉及到spring启动位置的部分,下面就看看spring到底是从哪儿开始加载的。本文使用的是spring3.0M3

首先spring的加载会借助一个监听器ContextLoaderListener,直接上web.xml文件
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>



我们通常会对加载位置统一管理  
 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
			/WEB-INF/conf/spring/**/*.xml
        </param-value>
    </context-param>

这个org.springframework.web.context.ContextLoaderListener类型是springframework中的原始加载上下文的监听器,
通常我们会自定义一个Listener去继承ContextLoaderListener并另外实现我们需要初始化的接口(通常我们会选择实现一些接口来对session的管理)

public class FrameServletContextListener extends ContextLoaderListener implements ServletContextListener,HttpSessionAttributeListener,HttpSessionListener {
	//
	private ServletContext initPath(ServletContextEvent event) {

	}

    	public synchronized void contextDestroyed(ServletContextEvent event) {
	//
	}

	...
}

当监听器设置好了之后 ,启动web容器 监听器开始启动ContextLoaderListenerl
类中的方法contextInitialized()
	/**
	 * Initialize the root web application context.
	 */
	public void contextInitialized(ServletContextEvent event) {
		this.contextLoader = createContextLoader();
		if (this.contextLoader == null) {
			this.contextLoader = this;
		}
		this.contextLoader.initWebApplicationContext(event.getServletContext());
	}

这样this.contextLoader.initWebApplicationContext(event.getServletContext());ContextLoaderListener
就会借助容器的上下文去初始一个spring的应用上下文,使用到了ContextLoader这个类



在ContextLoader初始化时我们看到这样一块static代码
	static {
		// Load default strategy implementations from properties file.
		// This is currently strictly internal and not meant to be customized
		// by application developers.
		try {
			//这一句会去加载同在此包下的一个properties文件的值(ContextLoader.properties)
			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());
		}
	}

属性文件中这样定义
引用
org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext

这样我们就能根据属性文件中的定义反射出一个XmlWebApplicationContext上下文了

然而我们在XmlWebApplicationContext中看到如下变量

	/** Default config location for the root context */
	public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";

至此我们已经知道默认加载spring文件的启动位置了


当我们再看ContextLoader类,我们就会看到传说中的参数contextConfigLocation
	public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";


而XmlWebApplicationContext对象正是调用了这个参数去设置启动位置
		wac.setConfigLocation(servletContext.getInitParameter(CONFIG_LOCATION_PARAM));


再往上看XmlWebApplicationContext继承的AbstractRefreshableConfigApplicationContext类中的setConfigLocation方法将此抽象类中的String[] configLocations值填充

并在AbstractRefreshableConfigApplicationContext类中我们看到spring对默认启动文件位置和配置启动文件位置的支持
	protected String[] getConfigLocations() {
		return (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());
}
至此我们已经清楚spring将从哪儿加载并知道加载哪些文件了。
分享到:
评论

相关推荐

    Spring 自启动项目demo

    通过这个Spring自启动项目demo,我们可以学习到Spring如何管理和初始化Bean,以及如何使用Spring MVC来构建一个简单的Web应用。这只是一个基础的示例,实际项目中可能涉及到更复杂的配置和功能,如AOP(面向切面编程...

    Spring MVC源码深度剖析开源架构源码2021.pdf

    本知识点将围绕Spring MVC的源码深度剖析展开,详细介绍Spring MVC的源码结构、工作原理以及如何进行源码分析。 首先,要理解Spring MVC是如何启动和配置的。在web.xml文件中配置了DispatcherServlet,这是Spring ...

    Spring-5.1.5源码

    总之,`Spring-5.1.5源码`的分析涵盖了Spring框架在Web应用中的核心功能,包括初始化、配置加载、依赖注入、AOP、异常处理以及现代化Web技术的支持。深入理解这些知识点,对于提升Spring框架的使用技巧和开发效率...

    Spring MVC 配置请求的默认处理器.rar

    综上所述,配置Spring MVC请求的默认处理器涉及到web.xml的DispatcherServlet配置、Spring MVC配置文件的编写以及处理器映射、适配、拦截器和异常处理等相关组件的设置。理解并熟练掌握这些知识点,对于开发高效、...

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`&lt;context-param&gt;`和`...

    spring_MVC源码

    -- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&gt; 14. &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /&gt; 15. 16. &lt;!-- 对模型视图名称的解析...

    spring启动.txt

    ### Spring在Tomcat容器中的启动过程详解 #### 一、Spring框架简介 Spring是一个开源的轻量级Java开发框架,其核心设计目标是为了简化企业级应用的开发。Spring提供了全面的基础架构支持,使得开发者可以专注于业务...

    spring3 MVC 入门hello world源码

    **Spring3 MVC 入门Hello World源码解析** Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。本篇将深入探讨Spring3 MVC的基础知识,通过"Hello World"实例来...

    spring mvc quartz 动态设置时间

    - 在`web.xml`中,通过`contextConfigLocation`参数指定了Spring配置文件的位置,这样Spring会自动加载`applicationContext-quartz.xml`。 3. **业务逻辑**: - `SysScheduleServiceImpl`类实现了`...

    Spring源码学习七:web应用自动装配Spring配置文件1

    本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程。 首先,我们注意到在传统的Java应用程序中,通常使用`ClassPathXmlApplicationContext`手动创建...

    spring 个人小结 源码分析机制原理

    在启动时,Spring会加载`web.xml`中的`contextConfigLocation`参数指定的配置文件,例如`beans.xml`。在`beans.xml`中,`&lt;import&gt;`标签用于合并多个XML配置文件,使得我们可以将不同模块的配置分开管理。 创建`...

    Spring整合Struts

    ### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具...通过利用Spring的DI和AOP特性,以及Struts的MVC架构,企业级应用的开发变得更加高效、可维护和可扩展。

    spring MVC配置详解

    -- 可以自定义 servlet.xml 配置文件的位置和名称,默认为 WEB-INF 目录下,名称为[]-servlet.xml,如 spring-servlet.xml --&gt; &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/WEB-INF/spring-servlet.xml ...

    基于Maven 搭建Spring + SpringMVC源码.rar

    本篇文章将深入探讨如何使用Maven来搭建一个整合了Spring和Spring MVC的项目,并解析源码,帮助你理解这两个框架是如何协同工作的。 1. Maven简介: Maven是一个项目管理工具,它通过读取项目配置文件(pom.xml)...

    spring与axis的整合

    这是Spring框架启动时读取配置信息的关键步骤,通过`contextConfigLocation`参数指定配置文件的位置。 - **Axis配置**:同样在`Web.xml`文件中,通过配置`AxisServlet`实现了Axis Web服务的部署。这里的`load-on-...

    spring mvc 项目源码实例 + 完整环境配置详细说明

    **Spring MVC 项目源码实例与完整环境配置详解** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一个灵活的架构,将控制逻辑与业务逻辑分离,使得开发者可以更专注于应用程序的核心...

    spring和struts整合的三种方案

    通过在 `struts-config.xml` 中设置 `processorClass` 属性,我们可以使用 Spring 提供的 `DelegatingRequestProcessor` 或 `AutowiringRequestProcessor`。这两种处理器都允许 Spring 自动管理 Struts 中的 Action ...

    Spring框架web项目实战全代码分享

    - `&lt;context-param&gt;`:定义了一个名为`contextConfigLocation`的参数,其值指定了Spring应用上下文配置文件的位置,这里是`classpath*:`表示在类路径下查找所有以`applicationContext`开头的XML文件。 - `...

Global site tag (gtag.js) - Google Analytics