tiny-Spring是黄亿华大佬自己写的一个集合IOC和AOP于一身的一种轻量级【教学用】Spring框架,它的github库地址为:https://github.com/code4craft/tiny-spring

  这个轻量级框架一共有10个演进步骤,从第一步到第十步,我们可以通过查看它的测试用例以及源码内容的变化,逐步学习Spring的底层实现方式【那些SpringBoot、Spring以及其他衍生框架本质也是使用了这些方法实现,只是在其基础上添加了注解、新的简易化特性、更强的功能等等】。

  注意:

  ①这里面的逐步展示的框图,核心功能都是在前一步的基础上进行扩展而来的,相当于打补丁,前几步中的类也会有一些变化来适应当前的功能,但是变化不是特别大。

  ②可以直接在本地git clone目录下使用语句:git checkout step-1-【加tab键,回车到达指定的step代码版本】,不会的自己学一下:https://www.yiibai.com/git/git_checkout.html

step-1-container-register-and-get

  这个版本的tiny-Spring非常简单,本质就是一个静态工厂类,传入实例名称与BeanDefinition键值对,其中BeanDefinition中存储的就是实例本身

step-2-abstract-benfactory-and-do-bean-initilizing-in-it

  在上一步的基础,通过反射机制进行实例操作,现在传入的数据不是实例了,而是类对象

  在原有基础上添加了一个AbstractBeanFactory进行反射实例化

step-3-inject-bean-with-property

  在原有的基础上通过反射机制中的Field字段进行属性初始化

  专门添加了PropertyValue【存储属性名称、属性值】和PropertyValues【数组形式的PropertyValue】

step-4-config-beanfactory-with-xml

  在前一步的基础上引入通过xml本地文件进行数据初始化,①初始化Java-io配置;②读取xml本地文件;③通过之前已有的操作进行实例化已经属性初始化

  增加:io、xml相关辅助函数

step-5-inject-bean-to-bean

  本质上与前一步一样,只是在代码中加入懒加载特性,对xml中读取到的数据进行注册,但是并没有立刻进行实例化操作,在需要使用的时候才进行对象实例化。

step-6-invite-application-context

   将IOC的所有特性进行整合,将这些函数全部整合进行一个context包中以后就只需要调用一个简单的函数即可,无需关注其他的函数。

step-7-method-interceptor-by-jdk-dynamic-proxy

  这一步是IOC与AOP的分界点,本步骤使用的是静态代理模式,直接传入实例,进行代理方法调用

step-8-invite-pointcut-and-aspectj

  首次引入AOP的相关概念,本步骤最重要的是验证了切面这一概念

step-9-auto-create-aop-proxy

  将AOP的功能实现,使用的是系统自带的动态代理函数库

到了这一步就有点混乱了,不过整理一下他们的逻辑就会发现他们使用动态代理以及切面match来实现AOP功能

step-10-invite-cglib-aopproxy-factory

  这个和step-9基本上一样,不过这个是使用cglib实现的动态代理

总结:

  通过黄大佬的tiny-Spring能够由浅入深的学习Spring的核心特性:IOC与AOP,底层实现其实也并不难,这些动态工厂、动态代理都是Java程序员必备的技能。

最新文章

  1. WPF,Silverlight与XAML读书笔记第四十六 - 外观效果之三皮肤与主题
  2. I2C学习
  3. Linux下的PostgreSQL简单安装手册
  4. poj 3625 Building Roads
  5. LINUX 内核2
  6. proguardgui.bat来混淆已有的jar包
  7. js方法的命名不能使用表单元素的名称或ID
  8. Linux中的sed
  9. Cocos2d-x3.2总结---使用物理引擎进行碰撞检测
  10. BZOJ 3065 带插入区间K小值
  11. 特征提取算法的综合实验(多种角度比较sift/surf/brisk/orb/akze)
  12. java连接sql server数据库(使用用户sa)
  13. Java多线程概念
  14. 问题1:Oracle数据库监听启动失败(重启监听,提示The listener supports no services)
  15. 从面试连跪到收割offer,回顾我的春招面试历程(研发岗位)
  16. KVO的使用一
  17. coffee.js
  18. Qt warning: 构建目录必须和源文件目录为同级目录
  19. vins-mono调试教程
  20. office 2010 正在配置Microsoft Office ...

热门文章

  1. ArcGIS数据建模 (模型构建器modelbuilder) 培训视频 5章28小节587分钟视频 51GIS网站上线
  2. 2019.06.17课件:[洛谷P1310]表达式的值 题解
  3. python @classmethod
  4. Git放弃修改
  5. git notes的使用
  6. Java 处理json字符串value中多余的双引号
  7. ifc tree
  8. osg 场景漫游
  9. 视频软件——ffmpeg
  10. matlab学习——05插值和拟合(黄河小浪底调水调沙问题)