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

tiny-Spring【2】逐步step分析-新加入特性的更多相关文章

  1. Spring Ioc源码分析系列--Ioc源码入口分析

    Spring Ioc源码分析系列--Ioc源码入口分析 本系列文章代码基于Spring Framework 5.2.x 前言 上一篇文章Spring Ioc源码分析系列--Ioc的基础知识准备介绍了I ...

  2. spring事务源码分析结合mybatis源码(一)

    最近想提升,苦逼程序猿,想了想还是拿最熟悉,之前也一直想看但没看的spring源码来看吧,正好最近在弄事务这部分的东西,就看了下,同时写下随笔记录下,以备后查. spring tx源码分析 这里只分析 ...

  3. Spring Boot 入门详细分析

    推荐阅读: 我们为什么要学习 Spring Boot 我们搭建 Spring Boot 项目,可以使用 Spring 为我们提供的初始化网站,那个可能不太方便,今天呢,我们就来说说如何使用 IDEA ...

  4. Spring IOC 源码分析

    Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文 ...

  5. Spring AMQP 源码分析 02 - CachingConnectionFactory

    ### 准备 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理   ## 前置知识   <Spring AMQP 源码分析 01 - Impatie ...

  6. Spring事务管理全面分析

    Spring 事务属性分析什么是事物  事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常 ...

  7. Spring处理@Configuration的分析

    Spring处理@Configuration的分析 声明:本文若有任何纰漏.错误,还请不吝指出! 序言 @Configuration注解在SpringBoot中作用很大,且不说SpringBoot中的 ...

  8. 精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  9. 5.2 Spring5源码--Spring AOP源码分析二

    目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博 ...

随机推荐

  1. qt mvc3

    前面两节讲的model是一维的,这次开始二维的也就是我们常说的Table,相对与list,我们多了一个列的概念. 下面讲解一个例子.我先说明一下我们这个例子,在程序目录下,我们有一个文本文件,其中存放 ...

  2. libmidas.so.2

    libmidas.so.2 libmidas.so.2文件,使DATASNAP FOR LINUX中间件,支持OleVariant格式的序列,使TDataSetProvider+TClientData ...

  3. Mybatis xml mapper 特殊写法总结

    项目告一段落,业务代码也写得差不多了,框架仍然用的是 ssm ,为了省去单表数据库操作的代码编写,继续用 mybatis generator 生成单表对应的实体类.dao层映射关联及配置文件,私下还尝 ...

  4. Matlab图像处理——中值滤波medfilt2问题解决

    本文链接:https://blog.csdn.net/Pxzly1117/article/details/79201772程序: I=imread('13.jpg');%读入图像imshow(I);h ...

  5. Cookie的使用(js-cookie插件)

    js-cookie 官方文档 里面就详细的介绍了es5怎么引用,以下是ES6以上的用户 一.安装 npm install js-cookie --save 二.引用 import Cookies fr ...

  6. <JavaScript>constructor、prototype、__proto__和原型链

    在看了网上很多相关的文章,很多都是懵逼看完,并不是说各位前辈们写得不好,而是说实在不容易在一两次阅读中理解透.我在阅读了一些文章后,自己整理总结和绘制了一些相关的图,个人认为会更容易接受和理解,所以分 ...

  7. 关于做移动端ui自动化测试使用PC代理网络会出现的问题

    无论是手动操作app还是ui脚本操作app,只要你使用了代理网络,第一次请求的时长会耗时特别长,所以在移动端测试时尽量不要使用代理网络,减少不必要的麻烦

  8. PAT 甲级 1035 Password (20 分)(简单题)

    1035 Password (20 分)   To prepare for PAT, the judge sometimes has to generate random passwords for ...

  9. delphi 根据特殊符号字符获取字符串前或后的字符

    function GetBefore(substr, str:string):string; {©Drkb v.3(2007): www.drkb.ru, ®Vit (Vitaly Nevzorov) ...

  10. iOS-AVPlayer

    MPMoviePlayerController足够强大,几乎不用写几行代码就能完成一个播放器,但是正是由于它的高度封装使得要自定义这个播放 器变得很复杂,甚至是不可能完成.例如有些时候需要自定义播放器 ...