- 浏览: 194202 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kjmmlzq19851226:
这个和排序米有关系吧
一个排好序的数组,找出两数之和为m的所有组合 -
ileson:
...
spring在web.xml中的配置
a) Spring 初始化的时候首先要运行的类为: org.springframework.web.context. ContextLoaderListener 或 org.springframework.web.context. ContextLoaderServlet 。
它们在初始化函数里无一例外地实例化了 ContextLoader 类 , 然后调用了它的函数 public WebApplicationContext initWebApplicationContext(ServletContext ) 。
接下来看一下在这个方法里干了写什么
b) 在他的方法体内,关键是“ this.context = createWebApplicationContext(servletContext, parent); ”新建了一个“ ConfigurableWebApplicationContext ”类型的对象,在这一步实例化中几乎完成了所有的 spring 初始化工作。读取了所有的 spring 配置文件。它的工作步骤如下所述。
c) 首先,在将“ ConfigurableWebApplicationContext ”类型的对象实例化以后(这个对象实际的类型是这个包内的 XmlWebApplicationContext ),然后又给这个实例设置了三个属性,“ wac.setParent(parent); ”在默认的初始化过程中这一步设置了一个 null 值,然后又设置了一个“ wac.setServletContext(servletContext); ”,将系统默认的上下文设置进来,比较重要的是下面这一段:
if (configLocation != null) {
// 读取 spring 的应用配置文件
wac.setConfigLocations(StringUtils.tokenizeToStringArray(configLocation,Configurabl eWebApplicationContext.CONFIG_LOCATION_DELIMITERS));
}
它将我们的配置文件名放置到 wac 变量中,以待在后续的操作中使用。然后调用 “ wac.refresh(); ”完成主要的初始化 BeanFactory 的操作。如下。
d) 首先我们应该看一下我们实例化的对象
org.springframework.web.context.support.XmlWebApplicationContext 的类图:
e) “ wac.refresh(); ”从类结构里我们能找到这个方法来自它的父类: AbstractApplicationContext 在它的 refresh() 方法内我们可以看到 spring 的复杂逻辑。
首先执行了 refreshBeanFactory(); (来自 AbstractRefreshableApplicationContext )见 f),
f) refreshBeanFactory(); 这个方法由负责维护变量 beanFactory 的子类 AbstractRefreshableApplicationContext 实现,默认情况下这个方法直接实例化一个新的 DefaultListableBeanFactory 类型的 BeanFacorty, 然后调用一个起缓冲作用的配置函数生成一个将 beanFacroty 包装起来的对象 beanDefinitionReader ,然后对这个对象进行属性配置,实际上该方法主要负责生成一个临时的操作对象,对应调用的函数为“ loadBeanDefinitions(beanFactory); ”该方法为初始化期间较为重要的一个。 该方法来自其子类: AbstractRefreshableWebApplicationContext 对应的函数:
protected void loadBeanDefinitions(DefaultListableBeanFactory) ,然后这里又调用了自己定义的 protected void loadBeanDefinitions(XmlBeanDefinitionReader) 方法。此时,它就使用到了在 c) 中设置了的( wac.setConfigLocations(……)) 我们开发中密切相关的配置文件。(同时也要记住此时这个函数的参数 beanDefinitionReader ,之前已经设置了“ beanDefinitionReader.setResourceLoader(this); ”这里的 this 是我们在前面见到的 XmlWebApplicationContext (一个定义好了的上下文))。接着往下:
“ reader.loadBeanDefinitions(configLocations[i]); ” reader 开始加载我们配置文件内的东西了,不过真正复杂的实现此时才开始,我们继续往下走,在接下来的方法内默认情况下会执行:
if (resourceLoader instanceof ResourcePatternResolver) (该判断条件为 true ) , 由于从上面我们知道: beanDefinitionReader.setResourceLoader(this); 而 this 的类型为: XmlWebApplicationContext 所以 ((ResourcePatternResolver) resourceLoader).getResources(location); 得到一个 Resource[] 数组,接下来调用:
int loadCount = loadBeanDefinitions(resources); 该函数继续调用自己子类定义的一系列临时接口最终执行到 return doLoadBeanDefinitions(inputSource, encodedResource.getResource()); 在这个函数内初始化了处理 xml 文件的一些对象并将用户的配置文件解析为一个 Document 对象。然后又执行了一系列函数直到
return parser.registerBeanDefinitions(this, doc, resource); 这个函数来自我们新建的 DefaultXmlBeanDefinitionParser ,在这个类里最终执行了对 xml 文件的解析工作和对 beanFacroty 变量执行了设置工作。
g) 终于我们从这些繁杂的逻辑中跳了出来,继续执行 AbstractApplicationContext.refresh() 下面的工作,后续的代码主要仍旧是往一些常量里面设值。
此时 spring 初始化过程就结束了。
发表评论
-
Struts2参数赋值的方式和原理
2018-03-15 14:06 585参数赋值方式 1.属性驱动 public cl ... -
Spring事务传播属性与事务隔离级别
2012-03-25 15:32 1193一、PROPAGATION(事务传 ... -
spring在web.xml中的配置
2012-02-26 18:09 2928<?xml version="1.0" ... -
web项目中加载spring容器的方式
2012-02-26 17:14 12301、在Web.xml中,通过ContextLoaderList ... -
Spring加载配置文件的几种方式
2012-02-26 17:02 5134第一种:使用XmlBeanFactory+Resource ... -
Hibernate 与 Spring 多数据源的配置【转载】
2012-01-09 11:48 925Hibernate 与 Spring 多数据源的配置【转载】 ... -
SSH中操作Oracle Clob类型字段
2011-10-26 17:03 1538说明:使用以下方法时首先确认你已经配置好了 如果运行报:or ... -
Spring让LOB数据操作变得简单易行
2011-10-26 15:43 924本文讲解了在 Spring 中处理 LOB 数据 ... -
Spring Quartz 任务调度配置二
2011-05-10 15:04 9341、Spring 配置文件模板 <?xml ve ... -
Spring Quartz 任务调度配置一
2011-05-10 14:56 9731、Spring 配置文件模板 ... -
struts+spring+hibernate整合
2011-04-25 14:42 942本文基于Struts1.3.10+Spring2.5.6+Hi ... -
Hibernate的三种连接池设置C3P0、dbcp和Proxool
2011-04-13 16:17 823<!-- JDBC驱动程序 --> <p ... -
Java框架数据库连接池比较(c3p0,dbcp和proxool)
2011-04-13 16:07 932现在常用的开源数据连接池主要有c3p0,dbcp和proxoo ... -
Struts+Spring+JPA整合
2011-04-13 10:51 1453本文基于Struts1.3.10+Spring ... -
dwr配置文件
2011-04-12 13:15 896dwr.xml是DWR的配置文件。 ... -
struts2+spring+dwr+ibatis整合开发的最精简jar组合
2011-03-17 18:13 1287struts 2应用只需要下列几个必须的jar: common ... -
spring+dwr
2011-03-17 18:07 836首先开发环境是eclipse.这里需要hibernate3.2 ...
相关推荐
Spring源码学习概述 Spring是Java生态系统中的一种流行的开源框架,由Rod Johnson创立于2003年。Spring框架的主要目标是使Java应用程序的开发变得更加简洁、灵活和可维护。Spring框架的核心思想是基于依赖注入...
1、spring 的整体架构 2、spring的基本实现(xml的加载原理、标签解析、bean加载) 3、容器扩展 4、ioc和aop 5、事务 6、springmvc 7、dispatcherServlet
在"Spring源码学习"的过程中,你需要阅读和理解上述各个模块的核心类和接口,观察它们如何协同工作。Spring框架的设计思想和实现方式对于提升Java开发技能和理解软件设计原则非常有帮助。通过分析源码,你可以更深入...
struts+hibernate+spring源码学习:hr考勤管理系统.rar
Spring源码学习是深入理解这个框架工作原理的重要途径。这份"Spring源码学习工具"包含了编译版和未编译版的源码,以及相关辅助工具,旨在帮助开发者更有效地探索Spring的内部机制。 首先,让我们谈谈编译版和未编译...
spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文注释方便学习,spring源码学习加注释。 spring源码中文...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
struts+hibernate+spring源码学习:BBS系统 注意:此资源已经更新,请大家下载 struts+hibernate+spring源码学习:BBS系统(6月5日上传版) 页面: http://download.csdn.net/source/1383098
在标题中提到的"Spring源码学习附注释(Version 4.2.0)",这部分内容指的是Spring框架的核心源代码,版本为4.2.0。源码学习对于深入理解Spring的工作原理和扩展自定义功能至关重要。注释的加入使得源码更易于阅读和...
总之,Spring源码学习是一个深化编程技能,理解设计模式,以及提高问题解决能力的过程。通过深入研究,程序员不仅可以优化自己的代码,还能更高效地利用Spring框架提供的功能,提升项目的可维护性和扩展性。
Spring源代码解析(一)Spring中的事务处理.doc Spring源代码解析(二):ioc容器在Web容器中的启动.doc Spring源代码分析(三):Spring JDBC.doc Spring源代码解析(四):Spring MVC.doc Spring源代码解析(五):Spring ...
马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...
Struts、Hibernate和Spring是Java开发中非常重要的三个框架,它们分别在Web层、持久化层和业务层发挥着核心...通过分析和学习这个源码,你可以更好地理解这三大框架的协同工作原理,从而提高自己的开发效率和代码质量。
通过分析和学习这个BBS系统的源码,你可以深入了解Struts的请求处理流程,Hibernate的对象映射机制,以及Spring如何协调各个组件工作。这对于提升Java Web开发能力,尤其是企业级应用开发技能,是非常有价值的实践。...
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包
学习这个源码可以帮助开发者提升对Java Web开发的整体理解和实践能力,为构建更复杂的应用打下坚实基础。同时,了解这些框架的内部原理也有助于优化性能,解决可能出现的问题。通过这个BBS系统的源码,我们可以深入...
Spring框架 这是Spring框架的所在地:所有的基础。 总体来说,Spring框架和Spring项目系列通常简称为“ Spring”。 Spring提供了Java编程语言以外的所有所需内容,可用于为各种场景和体系结构创建企业应用程序。 请...
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导入eclipse中运行。共3个压缩包
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包