Spring 源码分析(ContextLoaderListener Parts)
ContextLoaderListener .java
java 代码
-
- public class ContextLoaderListener implements ServletContextListener {
-
- private ContextLoader contextLoader;
-
-
-
-
-
- public void contextInitialized(ServletContextEvent event) {
- this.contextLoader = createContextLoader();
- this.contextLoader.initWebApplicationContext(event.getServletContext());
- }
-
-
-
-
-
- protected ContextLoader createContextLoader() {
- return new ContextLoader();
- }
-
-
-
-
-
- public ContextLoader getContextLoader() {
- return this.contextLoader;
- }
-
-
-
-
-
- public void contextDestroyed(ServletContextEvent event) {
- if (this.contextLoader != null) {
- this.contextLoader.closeWebApplicationContext(event.getServletContext());
- }
- }
-
- }
-
2ContectLoader.java
//初始化工作,调用默认策略DEFAULT_STRATEGIES_PATH
java 代码
- 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());
- }
- }
调用默认策略DEFAULT_STRATEGIES_PATH
Spring在web环境下会默认初始化XmlWebApplicationContext这个
defaultStrategies:
java 代码
- # Default WebApplicationContext implementation class for ContextLoader.
- # Used as fallback when no explicit context implementation has been specified as context-param.
- # Not meant to be customized by application developers.
-
- org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext
-
-
- this.contextLoader.initWebApplicationContext(event.getServletContext());
初始化工作
java 代码
-
-
-
-
-
-
-
-
-
-
- public WebApplicationContext initWebApplicationContext(ServletContext servletContext)
- throws IllegalStateException, BeansException {
-
- if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
- throw new IllegalStateException(
- "Cannot initialize context because there is already a root application context present - " +
- "check whether you have multiple ContextLoader* definitions in your web.xml!");
- }
-
- servletContext.log("Initializing Spring root WebApplicationContext");
- if (logger.isInfoEnabled()) {
- logger.info("Root WebApplicationContext: initialization started");
- }
- long startTime = System.currentTimeMillis();
-
- try {
-
- ApplicationContext parent = loadParentContext(servletContext);
-
-
-
- this.context = createWebApplicationContext(servletContext, parent);
- servletContext.setAttribute(
- WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
-
- if (logger.isDebugEnabled()) {
- logger.debug("Published root WebApplicationContext as ServletContext attribute with name [" +
- WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE + "]");
- }
- if (logger.isInfoEnabled()) {
- long elapsedTime = System.currentTimeMillis() - startTime;
- logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");
- }
-
- return this.context;
- }
- catch (RuntimeException ex) {
- logger.error("Context initialization failed", ex);
- servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);
- throw ex;
- }
- catch (Error err) {
- logger.error("Context initialization failed", err);
- servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);
- throw err;
- }
- }
initWebApplicationContext()调用了createWebApplicationContext()
java 代码
-
-
-
-
-
-
-
-
-
-
-
- protected WebApplicationContext createWebApplicationContext(
- ServletContext servletContext, ApplicationContext parent) throws BeansException {
-
- Class contextClass = determineContextClass(servletContext);
-
-
- if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {
- throw new ApplicationContextException("Custom context class [" + contextClass.getName() +
- "] is not of type [" + ConfigurableWebApplicationContext.class.getName() + "]");
- }
-
- ConfigurableWebApplicationContext wac =
- (ConfigurableWebApplicationContext) BeanUtils.instantiateClass(contextClass);
- wac.setParent(parent);
- wac.setServletContext(servletContext);
- String configLocation = servletContext.getInitParameter(CONFIG_LOCATION_PARAM);
- if (configLocation != null) {
- wac.setConfigLocations(StringUtils.tokenizeToStringArray(configLocation,
- ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));
- }
-
- wac.refresh();
- return wac;
- }
java 代码
-
-
-
-
-
-
-
-
-
- protected Class determineContextClass(ServletContext servletContext) throws ApplicationContextException {
- String contextClassName = servletContext.getInitParameter(CONTEXT_CLASS_PARAM);
- if (contextClassName != null) {
- try {
- return ClassUtils.forName(contextClassName);
- }
- catch (ClassNotFoundException ex) {
- throw new ApplicationContextException(
- "Failed to load custom context class [" + contextClassName + "]", ex);
- }
- }
- else {
- contextClassName = defaultStrategies.getProperty(WebApplicationContext.class.getName());
- try {
- return ClassUtils.forName(contextClassName);
- }
- catch (ClassNotFoundException ex) {
- throw new ApplicationContextException(
- "Failed to load default context class [" + contextClassName + "]", ex);
- }
- }
- }
Notice: public static final String CONTEXT_CLASS_PARAM = "contextClass";
相关推荐
.NET CORE open sourse
### WiFi Module Datasheet Open Source 知识点详解 #### 一、产品概述与特性 **ESP8266WiFi模块**是一款具有超低功耗特性的UART-WiFi透传模块,它以其小巧的封装尺寸和先进的低功耗技术在移动设备及物联网(IoT)...
在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。
### Qt 静态编译详解 #### 一、引言 Qt 是一款跨平台的应用程序框架,广泛应用于桌面和嵌入式系统中。它以其强大的功能和易用性受到开发者的青睐。本文将详细介绍如何在 Windows 系统下进行 Qt 的静态编译,以及...
【标题】"DiscordBot-MangoBot-OSV: Discord Bot-Mango Bot-Open Source Version" 这个项目名为“芒果机器人-OSV”,是基于Python语言实现的一个开源版本的Discord聊天机器人。Discord是一个流行的即时通讯平台,...
这涉及到对项目需求的理解,例如,如果是Web开发,可能需要考虑Spring Boot、Django或Express.js;如果是移动开发,Android的React Native或Flutter,iOS的SwiftUI可能是选择之一。了解框架的特点、社区支持、性能和...
### Visual SourceSafe (VSS) 讲义知识点总结 #### 一、VSS 简介与版本 **1.1 VSS 概述** - **名称解释:** Visual SourceSafe,简称 VSS,是微软公司开发的一款源代码管理工具。 - **功能介绍:** 主要用于软件...
STM32F103系列微控制器是基于ARM Cortex-M3内核的高性能微处理器,由意法半导体(STMicroelectronics)生产。该芯片广泛应用于嵌入式系统设计,特别是工业自动化、电机控制和物联网等领域。FOC,即Field Oriented ...
这是个完全破解的sourse insight 只需按照文件里面介绍一步一步的操作就可以非常顺利的安装 这个sourse insight是属于版本6很好使用
"els_spring"这个文件名可能指的是Spring框架的相关源代码,Spring是Java企业级应用中最流行的一个开源框架,尤其在服务端开发中占据了重要地位。 1. Java基础知识: - 类与对象:Java是一种面向对象的语言,核心...
soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode离散数学——求集合;soursecode
北大青鸟spring教程(秘密资料冒死上传)
Source Insight是如今最好用的语言编辑器之一,支持几乎所有的语言, 如C、C++、ASM、PAS、ASP、HTML等常见的,还支持自己定义关键字,Source Insight提供了可快速访问源代码和源信息的功能。
Android 开源组件深度剖析 缘起 Android开发中,越来越多优秀的开源组件涌现处出来,可以帮助我们更快更好的实现功能,也节省大量的时间,但是在现实的开发过程中,很多人都没能真正用好开源的组件,我们觉得使用好...
SQL Server 2008是一款广泛使用的数据库管理系统,它提供了高效的数据存储、管理和查询功能。在深入探讨之前,我们先理解几个基本概念。数据库是按照特定数据结构组织、存储和管理数据的仓库,它能够科学地组织数据...
- 定义了一些成员函数如:`get_node_value()`、`get_depth()`、`f()`、`get_location(value)`、`show()`、`find_next_node(open[])`、`is_des()`、`is_equal(mm[3][3])` 和 `is_exit(open[])` 等。 2. **全局变量*...
cms4xml是使用XML,XSLT,PHP,MDB2,Query2XML,SQL和AJAX的小型,简单且智能的Web内容管理系统。 该cms可以与您的数据库内容或xml输出程序(例如feed(原子))一起简单地2g一起工作。
标题"SIPPHONE SOURSECODE"涉及的是一个与SIP(Session Initiation Protocol)电话相关的开源代码项目。SIP是一种用于建立、修改和终止多媒体通信会话的互联网协议,广泛应用于VoIP(Voice over Internet Protocol)...
### 星际争霸II:强化学习的新挑战 #### 摘要与背景 本文介绍了一种基于《星际争霸II》游戏的强化学习环境——SC2LE(StarCraft II Learning Environment)。这一领域为强化学习提出了一个新的重大挑战,相较于...
### PowerBuilder 数据窗口 Edit Source 详解 #### 一、PowerBuilder 概述及 Data Window 编辑源码 PowerBuilder(简称 PB)是一款强大的客户端/服务器应用开发工具,由Sybase公司开发,后被SAP收购。...