没有合适的资源?快使用搜索试试~ 我知道了~
spring源代码中文详解版
4星 · 超过85%的资源 需积分: 33 30 下载量 113 浏览量
2011-10-12
17:36:16
上传
评论
收藏 42KB DOCX 举报
温馨提示
试读
26页
spring源代码的中文解析,让你更加了解spring内部机制,封装类的重用于重写。
资源推荐
资源详情
资源评论
Spring
源代码详解
源代码解析一):
容器在 中, 容器的重要地位我们就不多说了,对于 的使用者而言,
容器实际上是什么呢?我们可以说 就是
我们看到的 容器,当然了 为我们准备了许多种 容器来使用,这样可以方
便我们从不同的层面,不同的资源位置,不同的形
式的定义信息来建立我们需要的 容器。
在 中,最基本的 容器接口是 这个接口为具体的 容器的实现
作了最基本的功能规定 不管怎么着,作为 容
器,这些接口你必须要满足应用程序的最基本要求:
这里是对 的自定义封装,因为如果使用 的名字检索 得
到的对象是工厂生成的对象,
如果需要得到工厂本身,需要转义
!"#!$"%&'(')
这里根据 的名字,在 容器中得到 实例,这个 容器就是一个大的抽
象工厂。
*+,-.//"01)
这里根据 的名字和 // 类型来得到 实例,和上面的方法不同在于它会抛
出异常:如果根据名字取得的 实例的 // 类型和需要的 *
+2//34,-.//"01)
这里提供对 的检索,看看是否在 容器有这个名字的
/+,)
这里根据 名字得到 实例,并同时判断这个 是不是单件
/+,-./#-561"01)
这里对得到 实例的 // 类型
//+,-./#-561"01)
这里得到 的别名,如果根据别名检索,那么其原名也会被检索出来
78//+,)
9
在 里只对 容器的基本行为作了定义,根本不关心你的 是怎样定义
怎样加载的 就像我们只关心从这个工厂里我们
得到到什么产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心这些 。
如果要关心工厂是怎样产生对象的,应用程序
需要使用具体的 容器实现当然你可以自己根据这个 来实现自己的
容器,但这个没有必要,因为 已经为我们
准 备 好 了 一 系 列 工 厂 来 让 我 们 使 用 。 比 如 %+ 就 是 针 对 最 基 础 的
的 容器的实现 这个实现使用 0+ 来定义 容器中的 。
提供了一个 的基本实现,%+ 同样的通过使用模板模式
来得到对 容器的抽象
/25:/ 这些抽象类为其提供模板服务。其中通
过 /接口来抽象 定义数据,对 %+
定义文件的解析通过委托给 %+5614 来完成。下面我们根据书上的例
子,简单的演示 容器的创建过程:
//$-//&.//$-/'/0+',)
5:/&.5:/,)
%+56144&.%+5614,)
44561//,)
这些代码演示了以下几个步骤:
创建 配置文件的抽象资源
;创建一个
< 把 读 取 配 置 信 息 的 56142 这 里 是 %+5614 配 置 给
=从定义好的资源位置读入配置信息,具体的解析过程由 %+5614 来
完成,这样完成整个载入 定义的过程。我们的 容器就建立起来了。
在 的源代码中我们可以看到:
//%+04/5:/
这里为容器定义了一个默认使用的 定义读取器
>6%+56144&.%+5614-/,)
%+//,-.//"01
-//2,)
9
在初始化函数中使用读取器来对资源进行读取,得到 定义信息。
%+/ /2 , -./
/"01
/,)
-/44561//,)
9
我们在后面会看到读取器读取资源和注册 定义信息的整个过程,基本上是和上下
文的处理是一样的,从这里我们可以看到上下文
和 %+ 这两种 容器的区别, 往往不具备对资源定义的能力,
而上下文可以自己完成资源定义,从这个角度
上看上下文更好用一些。
仔 细 分 析 的 结 构 , 我 们 来看看在 基 础 上 扩 展 出 的
10我们最常使用的上下文。除了具备
的全部能力,上下文为应用程序又增添了许多便利:
?可以支持不同的信息源,我们看到 10 扩展了 @//
?访问资源 2体现在对 /:4 和 / 的支持上面,这样我们可以从不同地
方得到 定义资源
?支持应用事件,继承了接口 1">$/-2这样在上下文中引入了事件机制
而 是没有的。
10 允许上下文嵌套 通过保持父上下文可以维持一个上下文体系 这个
体系我们在以后对 A 容器中的上下文环境的分析中可以清楚地看到。对于 的查
找可以在这个上下文体系中发生,首先检查当前上下文,其次是父上下文,逐级向上 ,
这样为
不同的 应用提供了一个共享的 定义环境。这个我们在分析 A 容器中的上
下文环境时也能看到。
10 提 供 容 器 的 主 要 接 口 , 在 其 体 系 中 有 许 多 抽 象 子 类 比 如
/10 为具体的 的实现,
比如 /+%+10 和 //$-%+10 提供上下文的模
板,使得他们只需要关心具体的资源定位问
题。当应用程序代码实例化 /+%+10 的时候,得到 容器的一
种具体表现 10,从而应用程
序通过 10 来管理对 的操作。
是一个接口,在实际应用中我们一般使用 10 来使用 容
器,它们也是 容器展现给应用开发者的使用
接口。对应用程序开发者来说,可以认为 和 1 在不同的使
用层面上代表了 $#B 提供的 容器服务。
下面我们具体看看通过 /+%+10 是怎样建立起 容器的2显而
易见我们可以通过 . 来得到 容器:
10&./+%+100+$-,)
调用的是它初始化代码:
/+%+1078 6:1/2 /-2
10,
-.//"01
/,)
-/6:1/&6:1/)
/-,
这 里 是 容 器 的 初 始 化 过 程 , 其 初 始 化 过 程 的 大 致 步 骤 由
/10 来定义
/-,)
9
9
/- 的模板在 /10C
>4/-,-.//"012"01
/-D4-//-4.@,
/-D4-/1>@,
-/1>&)
9
这里需要子类来协助完成资源位置定义2 载入和向 容器注册的过程
/-,)
9
这个方法包含了整个 初始化的过程,对于特定的 /+%+2
我们看到定位资源位置由 /-,
来实现:
在 /%+10 中 定 义 了 对 资 源 的 读 取 过 程 , 默 认 由
%+5614 来读取:
4 >4 4561/5:/ , -./
"01
这里使用 %@:5614 来载入 定义信息的 %@: 文件
%+5614 5614 & .
%+5614,)
这里配置 4 的环境,其中 /:4 是我们用来定位 定义信息资源位
置的
因 为 上 下 文 本 身 实 现 了 /:4 接 口 , 所 以 可 以 直 接 把 上 下 文 作 为
/:4 传递给 %+5614
5614//:4-/,)
5614/"1/>./"1/>-/,,)
56145614,)
这里转到定义好的 %+5614 中对载入 信息进行处理
4561/5614,)
9
转到 5614 中进行处理:
4 >4 4561/%+5614 4, -./
/"012"01
/786//&6//,)
6//E&,
调用 %+5614 来载入 定义信息。
44561/6//,)
9
786:1/&6:1/,)
6:1/E&,
44561/6:1/,)
9
9
而在作为其抽象父类的 /5614 中来定义载入过程:
4561/1,-./561"01
这里得到当前定义的 /:42默认的我们使用 5/:4
/:4/:4&/:4,)
如果没有找到我们需要的 /:4,直接抛出异常
/:4//$F/>,
这里处理我们在定义位置时使用的各种 F2需要 /$F/> 来完成
/78//&/$F/>,/:4,//1,)
4&4561///,)
4)
9
9
/
这里通过 /:4 来完成位置定位
//&/:4/1,)
这里已经把一个位置定义转化为 / 接口,可以供 %+5614 来
使用了
4&4561//,)
4)
9
9
当我们通过 /:4 来载入资源,别忘了了我们的 B10 也
实现了 /:4 接口:
// B10 04/ /10 ++/
561/
//1,
这里调用当前的 4 也就是 5/:4 来完成载入
-//:4E&,
-//:4/1,)
9
//1,)
9
9
而 我 们 的 /+%+10 就 是 一 个 5/:4
B10,通过 5/:4C
//1,
如果是类路径的方式,那需要使用 //$-/ 来得到 文件的资源对象
1//A-:$G!H:!$"%,,
. //$-/1//:$G!H:!$"%-,,2
//:4,,)
9
/
如果是 H: 方式,使用 H/ 作为 文件的资源对象
H:&.H:1,)
.H/,)
9
-@+4H:"010,
如果都不是,那我们只能委托给子类由子类来决定使用什么样的资源对象了
/$-1,)
9
-FC*.I+ 源代码解析一): 容器
第 JKL页
9
9
我们的 /+%+10 本身就是是 5/:4 的实现类,
他实现了以下的接口:
4//$--,
剩余25页未读,继续阅读
资源评论
- Apv2011-10-27不知道是不是我的问题,格式好像是乱的 代码文字没分开。
清风日明月
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功