这几天在看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如何管理和初始化Bean,以及如何使用Spring MVC来构建一个简单的Web应用。这只是一个基础的示例,实际项目中可能涉及到更复杂的配置和功能,如AOP(面向切面编程...
本知识点将围绕Spring MVC的源码深度剖析展开,详细介绍Spring MVC的源码结构、工作原理以及如何进行源码分析。 首先,要理解Spring MVC是如何启动和配置的。在web.xml文件中配置了DispatcherServlet,这是Spring ...
总之,`Spring-5.1.5源码`的分析涵盖了Spring框架在Web应用中的核心功能,包括初始化、配置加载、依赖注入、AOP、异常处理以及现代化Web技术的支持。深入理解这些知识点,对于提升Spring框架的使用技巧和开发效率...
综上所述,配置Spring MVC请求的默认处理器涉及到web.xml的DispatcherServlet配置、Spring MVC配置文件的编写以及处理器映射、适配、拦截器和异常处理等相关组件的设置。理解并熟练掌握这些知识点,对于开发高效、...
在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`<context-param>`和`...
-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --> 14. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 15. 16. <!-- 对模型视图名称的解析...
### Spring在Tomcat容器中的启动过程详解 #### 一、Spring框架简介 Spring是一个开源的轻量级Java开发框架,其核心设计目标是为了简化企业级应用的开发。Spring提供了全面的基础架构支持,使得开发者可以专注于业务...
**Spring3 MVC 入门Hello World源码解析** Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。本篇将深入探讨Spring3 MVC的基础知识,通过"Hello World"实例来...
- 在`web.xml`中,通过`contextConfigLocation`参数指定了Spring配置文件的位置,这样Spring会自动加载`applicationContext-quartz.xml`。 3. **业务逻辑**: - `SysScheduleServiceImpl`类实现了`...
本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程。 首先,我们注意到在传统的Java应用程序中,通常使用`ClassPathXmlApplicationContext`手动创建...
在启动时,Spring会加载`web.xml`中的`contextConfigLocation`参数指定的配置文件,例如`beans.xml`。在`beans.xml`中,`<import>`标签用于合并多个XML配置文件,使得我们可以将不同模块的配置分开管理。 创建`...
### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具...通过利用Spring的DI和AOP特性,以及Struts的MVC架构,企业级应用的开发变得更加高效、可维护和可扩展。
-- 可以自定义 servlet.xml 配置文件的位置和名称,默认为 WEB-INF 目录下,名称为[]-servlet.xml,如 spring-servlet.xml --> <param-name>contextConfigLocation <param-value>/WEB-INF/spring-servlet.xml ...
本篇文章将深入探讨如何使用Maven来搭建一个整合了Spring和Spring MVC的项目,并解析源码,帮助你理解这两个框架是如何协同工作的。 1. Maven简介: Maven是一个项目管理工具,它通过读取项目配置文件(pom.xml)...
这是Spring框架启动时读取配置信息的关键步骤,通过`contextConfigLocation`参数指定配置文件的位置。 - **Axis配置**:同样在`Web.xml`文件中,通过配置`AxisServlet`实现了Axis Web服务的部署。这里的`load-on-...
**Spring MVC 项目源码实例与完整环境配置详解** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一个灵活的架构,将控制逻辑与业务逻辑分离,使得开发者可以更专注于应用程序的核心...
通过在 `struts-config.xml` 中设置 `processorClass` 属性,我们可以使用 Spring 提供的 `DelegatingRequestProcessor` 或 `AutowiringRequestProcessor`。这两种处理器都允许 Spring 自动管理 Struts 中的 Action ...
- `<context-param>`:定义了一个名为`contextConfigLocation`的参数,其值指定了Spring应用上下文配置文件的位置,这里是`classpath*:`表示在类路径下查找所有以`applicationContext`开头的XML文件。 - `...