tiny-Spring【2】逐步step分析-新加入特性

  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程序员必备的技能。

原文地址:https://www.cnblogs.com/Mufasa/p/11557722.html