tiny-Spring是黄亿华大佬本身写的一个集合IOC和AOP于一身的一种轻量级【教学用】Spring框架,它的github库地址为:https://github.com/code4craft/tiny-springhtml
这个轻量级框架一共有10个演进步骤,从第一步到第十步,咱们能够经过查看它的测试用例以及源码内容的变化,逐步学习Spring的底层实现方式【那些SpringBoot、Spring以及其余衍生框架本质也是使用了这些方法实现,只是在其基础上添加了注解、新的简易化特性、更强的功能等等】。git
注意:程序员
①这里面的逐步展现的框图,核心功能都是在前一步的基础上进行扩展而来的,至关于打补丁,前几步中的类也会有一些变化来适应当前的功能,可是变化不是特别大。github
②能够直接在本地git clone目录下使用语句:git checkout step-1-【加tab键,回车到达指定的step代码版本】,不会的本身学一下:https://www.yiibai.com/git/git_checkout.html
spring
这个版本的tiny-Spring很是简单,本质就是一个静态工厂类,传入实例名称与BeanDefinition键值对,其中BeanDefinition中存储的就是实例自己数组
在上一步的基础,经过反射机制进行实例操做,如今传入的数据不是实例了,而是类对象app
在原有基础上添加了一个AbstractBeanFactory进行反射实例化框架
在原有的基础上经过反射机制中的Field字段进行属性初始化yii
专门添加了PropertyValue【存储属性名称、属性值】和PropertyValues【数组形式的PropertyValue】函数
在前一步的基础上引入经过xml本地文件进行数据初始化,①初始化Java-io配置;②读取xml本地文件;③经过以前已有的操做进行实例化已经属性初始化
增长:io、xml相关辅助函数
本质上与前一步同样,只是在代码中加入懒加载特性,对xml中读取到的数据进行注册,可是并无马上进行实例化操做,在须要使用的时候才进行对象实例化。
将IOC的全部特性进行整合,将这些函数所有整合进行一个context包中之后就只须要调用一个简单的函数便可,无需关注其余的函数。
这一步是IOC与AOP的分界点,本步骤使用的是静态代理模式,直接传入实例,进行代理方法调用
首次引入AOP的相关概念,本步骤最重要的是验证了切面这一律念
将AOP的功能实现,使用的是系统自带的动态代理函数库
到了这一步就有点混乱了,不过整理一下他们的逻辑就会发现他们使用动态代理以及切面match来实现AOP功能
这个和step-9基本上同样,不过这个是使用cglib实现的动态代理
经过黄大佬的tiny-Spring可以由浅入深的学习Spring的核心特性:IOC与AOP,底层实现其实也并不难,这些动态工厂、动态代理都是Java程序员必备的技能。