- 浏览: 1016218 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
一、 概述 <o:p></o:p>
二、 Spring 初始化之旅 <o:p></o:p>
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 的类图:
<o:p> </o:p>
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 初始化过程就结束了。
发表评论
-
spring2.0-2.5-3.0变化[转]
2011-09-10 00:50 11512.5的新特性 Spri ... -
Spring的JMX支持
2011-08-10 20:31 1183Spring的JMX支持所提供的特性使你容易而又透明地将你的S ... -
Spring.Net入门篇(一) [转]
2011-07-20 01:15 2372简介 从OO到AOP,一路走来就是眼花缭 ... -
开源框架spring详解-----AOP的深刻理解
2011-07-01 18:31 1051AOP是一种不同于OOP(面向对象编程)的编程模式,它 ... -
AOP学习——配置Spring AOP【2】,使用annotation
2011-07-01 13:41 1010使用 annotation 配置 AOP ... -
AOP学习——配置Spring AOP【1】,使用xml文件
2011-07-01 13:34 927使用 Spring AOP ,除了 spring ... -
Spring2.5注释语法(上)——Spring2.5注释驱动的IoC
2011-07-01 10:30 683Spring2.5 注释语法( 上) ... -
Spring2.5注释驱动与基于注释的MVC
2011-07-01 10:28 764写在前面: 好长 ... -
BoneCP,Proxool,DBCP,C3P0 参数介绍的简介与内容
2011-06-15 12:31 1200DBCP,C3P0,Proxool,BoneCP详细参数介绍 ... -
使用Spring HTTP invoker进行远程调用
2011-06-08 19:03 1080http://www.kompakar.com.cn/disc ... -
spring http invoker 高级篇
2011-06-08 19:03 1246默认情况下,客户端的HttpInvokerProxy使用J2S ... -
Spring管理Filter和Servlet
2011-06-08 19:02 992Spring 管理 filter 和 ser ... -
Spring HTTP invoker简介
2011-06-08 19:01 989Spring HTTP invoker 简介 S ... -
详解Spring Web MVC中的DispatcherServlet类
2011-06-08 00:55 1288Spring 的Web MVC框架是围绕Dispatch ... -
spring2.5注解式MVC配置
2011-06-08 00:49 1356转载自http://www.ibm.com/developer ... -
解惑 spring 嵌套事务
2011-05-13 00:28 847在所有使用 spring 的应用中, 声明式事务管理可能是使用 ... -
Spring + iBatis 的多库横向切分简易解决思路
2011-05-13 00:26 11241.引言 笔者最 ... -
Spring多数据源解决方案
2011-05-13 00:14 969在很多大型应用中都会对数据进行切分,并且采用多个数据库实例进行 ... -
Spring工具类,提供取得Bean的方法,方便单元测试
2011-03-15 15:46 1351Spring工具类,提供取得Bean的方法,方便单元测试 ... -
Spring 的优秀工具类盘点
2011-03-15 15:38 506Spring 的优秀工具类盘点,第 1 部分: 文件资源操作和 ...
相关推荐
微服务架构之旅带你深入探索Spring Cloud的精彩世界。Spring Cloud作为一个强大的微服务工具包,它为企业级开发提供了全面的解决方案,涵盖了配置管理、服务发现、断路器、智能路由、微代理、控制总线等多个核心功能...
《Spring框架核心模块深度解析》 Spring框架是Java开发领域中的一个重要组成部分,它以其强大的功能和灵活的设计赢得了广泛的赞誉。...无论是新手还是经验丰富的开发者,理解Spring的源码都将是一次宝贵的进阶之旅。
5. **主程序中的Spring初始化**:在`Program.cs`中,我们需要初始化Spring容器并获取bean实例。Spring提供了一个`XmlApplicationContext`类来加载配置并创建bean: ```csharp using Spring.Context; using ...
Spring Boot 2.2.6 源码之旅三SpringApplication启动流程三初始化基本流程SpringApplication的setListeners设置监听器deduceMainApplicationClass对端主启动类rungetRunListeners获取SpringApplicationRunListener...
总的来说,“模拟Spring”不仅是一次学习之旅,也是一次提升开发技能的过程。通过对源码的阅读和实践,我们可以深入理解Spring的内部工作原理,进一步提升我们的编程水平和问题解决能力。无论你是Spring的新手还是...
2. **Spring之旅** 在开始Spring之旅之前,首先需要建立一个开发环境。通常,这包括安装Java开发工具(JDK),配置Java环境变量,然后选择一个集成开发环境(IDE),如Eclipse或IntelliJ IDEA。对于Spring项目,还...
**Spring 框架概述** Spring 是一个开源的 Java 应用框架,它以其轻量级、模块化和面向切...希望这篇入门笔记能为你开启 Spring 的探索之旅,欢迎在学习过程中发现错误或有任何疑问时,通过博主的博客进行交流和指正。
Java SSM框架初始工程——开启你的Java Web开发之旅你是否正在寻找一个简单而有效的Java SSM(Spring + SpringMVC + MyBatis)框架初始工程?这个项目将为你提供一个坚实的基础,以构建企业级Java Web应用程序。这个...
#### 二、Spring之旅 ##### 2.1 建立开发环境 在开始学习 Spring 之前,需要搭建一个基本的开发环境。这通常包括安装 Java 开发工具包 (JDK)、集成开发环境 (IDE) 如 IntelliJ IDEA 或 Eclipse,以及添加必要的 ...
第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP使用 1.5 小结 第2章 ...
在本教程中,你将学习如何使用Spring Initializr初始化一个Spring Boot项目,如何配置pom.xml或build.gradle文件添加所需的依赖。同时,你还将了解到Spring Boot的主配置类@SpringBootApplication,它是启动Spring ...
在实际使用中,用户可以通过XML配置文件来定义Bean及其依赖关系,这就是所谓的"BeanFactory的XML之旅"。XML配置文件中可以声明Bean的定义,包括其类名、属性、依赖的其他Bean等。Spring容器会解析这些配置,根据定义...
通过IDEA或Eclipse等集成开发环境导入项目,根据需求添加starter依赖,编写启动类,即可开始你的Spring Boot之旅。同时,"东坡软件下载说明.txt"中可能包含有关下载和安装的详细步骤,对于初学者来说是一份宝贵的...
Spring框架是Java开发中不可或缺的一部分,它以其模块化、易扩展和全面的特性深受开发者喜爱。Spring 5.2.0.RELEASE是该框架的一个...通过这个压缩包,开发者可以获取到Spring框架的所有核心模块,开始他们的开发之旅。
《深入剖析Spring源码》 Spring框架作为Java领域最广泛使用的开源框架之一,其设计理念、设计模式以及核心组件的实现细节对于任何...Spring源码的阅读和学习,是一场深度技术之旅,也是每个Java开发者进阶的必经之路。
Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了一种模块化、可测试和高效的方式。...开始你的Spring之旅,你会发现这个框架的强大和灵活性,为你的Java开发带来无尽的可能性。
Spring 2框架是Java开发中的一个核心组件,它提供了一个全面的应用程序开发模型,旨在简化企业级Java应用程序的创建和...它将引导你逐步了解Spring的基本概念,教你如何配置和使用Spring,从而开启你的Spring开发之旅。
第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP 1.4.1 AOP介绍 1.4.2 AOP使用 1.5 小结 第2章 ...
1. **Spring Boot**:简化了Spring应用的初始化和配置,提供了“开箱即用”的功能,如内嵌的Tomcat服务器、自动配置等。 2. **Spring Tool Suite (STS)**:这是一个集成开发环境,专为Spring开发者设计,提供了强大...