spring 源码阅读学习
来源:互联网 发布:ui设计网站知乎 编辑:程序博客网 时间:2024/06/18 04:03
本文说明2点:
1.阅读源码的入口在哪里?
2.入门前必备知识了解:IOC和AOP
一、我们从哪里开始
1.准备工作:在官网上下载了spring源代码之后,导入Eclipse,以方便查询。
2.打开我们使用Spring的项目工程,找到Web.xml这个网站系统配置文件,在其中找到Spring的初始化信息:
由配置信息可知,我们开始的入口就这里ContextLoaderListener这个监听器。
在源代码中我们找到了这个类,它的定义是:
该类继续了ContextLoader并实现了监听器,关于Spring的信息载入配置、初始化便是从这里开始了,具体其他阅读另外写文章来深入了解。
二、关于IOC和AOP
关于Spring IOC 网上很多相关的文章可以阅读,那么我们从中了解到的知识点是什么?
1)IOC容器和AOP切面依赖注入是Spring是核心。
IOC容器为开发者管理对象之间的依赖关系提供了便利和基础服务,其中Bean工厂(BeanFactory)和上下文(ApplicationContext)就是IOC的表现形式。BeanFactory是个接口类,只是对容器提供的最基本服务提供了定义,而DefaultListTableBeanFactory、XmlBeanFactory、ApplicationContext等都是具体的实现。
接口:
实现:
XmlBeanFactory的实现是这样的:
我们可以看到IOC容器使用的一些基本过程:
如:DefaultListableBeanFactory
这些代码演示了以下几个步骤:
1. 创建IOC配置文件的抽象资源
2. 创建一个BeanFactory,这里我们使用DefaultListableBeanFactory
3. 创建一个载入bean定义信息的读取器,这里使用XmlBeanDefinitionReader来载入XML形式
的bean定义信息,配置给BeanFactory
4. 从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成,这
样完成整个载入和注册bean定义的过程。我们的IoC容器就建立起来了。
再简单的说,我的系统在启动时候,会完成的动作就是
1.由ResourceLoader获取资源文件,也即bean的各种配置文件
2.由BeanDefintion对配置文件的定义信息的载入
3.用BeanDefinitionRegistry接口来实现载入bean定义信息并向IOC容器进行注册。
注意,IOC容器和上下文的初始化一般不包含Bean的依赖注入的实现。
2)AOP这个过程并不是在注册bean的过程实现的。
我们只看到在处理相关的Bean属性的时候,使用了RuntimeBeanReference对象作为依赖信息的纪录。
在IOC容器已经载入了用户定义的Bean信息前提下,这个依赖注入的过程是用户第一次向IOC容器索要Bean的时候触发的,或者是我们可以在Bean定义信息中通过控制lazy-init属性来使得容器完成对Bean的预实例化 - 这个预实例化也是一个完成依赖注入的过程。
我们说明一下过程:
1.用户想IOC容器请求Bean。
2.系统先在缓存中查找是否有该名称的Bean(去各个BeanFactory去查找)
3.没有的话就去创建Bean并进行依赖注入,并且这个请求将被记录起来。
请求Bean具体的实现:
代码入口在DefaultListableBeanFactory的基类AbstractBeanFactory中:
注入Bean具体的实现:
具体的bean创建过程和依赖关系的注入在createBean中,这个方法在AbstractAutowireCapableBeanFactory中给出了实现:
这就是整个依赖注入的部分处理过程,在这个过程中起主要作用的是WrapperImp ,这个Wrapper不是一
个简单的对bean对象的封装,因为它需要处理在beanDefinition中的信息来迭代的处理依赖注入。
到这里,这是简单的,大概的对IOC和AOP进行了解,入门先到这一点便已经有了大概的印象了。
参考资料:《Spring_IOC详解》
- spring 源码阅读学习
- Spring学习1:Spring源码阅读环境搭建
- Spring学习1:Spring源码阅读环境搭建
- Spring学习1:Spring源码阅读环境搭建
- Spring源码阅读3
- 阅读spring源码
- eclipse阅读spring源码
- Spring Framework 源码阅读
- spring源码阅读笔记
- Spring源码阅读 --BeanDefinition
- spring 源码阅读入门
- 阅读spring 源码
- 如何阅读spring源码
- Spring源码阅读笔记
- Spring 源码阅读-Spring概述
- Spring源码阅读入门指引
- Spring 源码阅读之BeanFactory
- Spring源码阅读入门指引
- tensorflow使用range_input_producer多线程读取数据
- ZooKeeper实战应用之【统一配置管理】
- imx6ul之OpenWRT中使用mpd作为音频Server及其使用
- 扩展欧几里德总结
- POJ 2739 Sum of Consecutive Prime Numbers
- spring 源码阅读学习
- 关于Recyclerview删除item后的数据乱跳问题
- Manacher算法总结
- Android Art Hook 技术方案
- 【源码分析】Elastic-Job源码分析之AbstractElasticJobExecutor分析
- lua 函数
- python基础操作mongodb
- 应用进程与系统进程的通信(IActivityManager & IApplicationThread)
- Qt/QSS封装管理类,更好的管理你的QSS样式