看Spring源码之容器的点滴收获

Spring 源码地址:https://github.com/spring-projects/spring-framework

111124_vZVU_2489417.png

阅读过程

因为 Spring 是分模块的,所以阅读 Spring 3.2.11 版本的源码过程打算先从最底层的模块开始,然后再由下向上分析每一个模块的实现过程。在阅读过程中,随着对代码的理解加深,也会重新阅读已经读过的代码。

大概的阅读顺序:

  • spring-core:了解 Spring 提供哪些工具类以及一些基础的功能,如对资源文件的封装、对 Propertis 文件操作的封装、对 Environment 的封装等等。
  • spring-context:通过分析 Spring 的启动方式,了解 Spring xml 文件的解析过程,bean 的初始化过程
  • spring-orm
  • spring-tx
  • spring-web

先研究下Spring的 IoC容器:

BeanFactory bf =new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml"));
MyTestBean bean = (MyTestBean)bf.getBean("test");

以上是Spring容器的简单实现,构造XmlBeanFactory这个IoC容器,需要指定BeanDefinition的消息来源,而这个消息来源需要封装成Spring中的Resource类来给出。Resource是Spring用来封装I/O操作的类。比如:这里我们的BeanDefinition信息是以XML文件形式存在,new ClassPathResource("beanFactoryTest.xml")来构造Resource资源文件实例对象,然后将Resource作为构造参数传递给XmlBeanFactory构造函数。这样,Ioc容器就可以方便的定位到需要BeanDefinition信息来对Bean完成容器的初始化和依赖注入的过程。

下面跟进去看下源码

看源码:

141321_dTnt_2489417.png

这里进行XmlBeanFactory的初始化时,用Resource接口作为方法参数传递,为什么会用接口作为参数传递?大家可以参考这个http://blog.csdn.net/woainike/article/details/6620862博客来理解其中的设计(可以看看23种模式下的代理模式http://blog.csdn.net/jackiehff/article/details/8621517、 Java设计模式——代理模式实现及原理)。

(通俗解释: 
比如,我这个方法传进来的参数必须是动物(能吃饭,睡觉);具体是什么动物我不管。 
你调用这个方法时,就必须传个具体动物进来,这个动物必须能吃饭睡觉,否则我不接受。每种动物如何吃饭,睡觉还不一样,就看你具体传进来是什么动物)

构造完Resource资源文件实例对象,这样后续的资源处理就可以用Resource提供的各种服务来操作了。

 

下面看下Resource的层次结构图:那么Resource(配置文件)资源时如何封装的?

135918_0F1l_2489417.png

Resource接口抽象了内部所有用到底层资源:File、ClassPath、Url等。对不同来源的资源文件都有相应的Resource实现。比如文件(FileSystemResource)、Byte数组(ByteArrayResource)、资源(ClassPathResource)等。

ClassPathResource中的实现方是通过class或者classLoader提供的底层方法进行调用。

150650_L52J_2489417.png

未完待续。。

参考书籍:

Spring源码深度解析

Spring技术内幕--深入解析Spring架构与设计原理

参考博客:

1000行代码读懂Spring(一)- 实现一个基本的IoC容器

https://my.oschina.net/flashsword/blog/192551

Spring三种bean注入方式

Spring源码整体架构  https://yq.aliyun.com/articles/25646

 

 

 

 

 

转载于:https://my.oschina.net/u/2489417/blog/817542

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值