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. github免费私有仓库使用

    本文链接:https://blog.csdn.net/subfate/article/details/86147645github仓库前不久开放了个人私有仓库(原来要收费),个人使用无数量限制.对于想 ...

  2. 7个最好的Java机器学习开发库

    摘要:现如今,拥有深度学习和机器学习领域的技术是科技界的趋势之一,并且企业则希望雇佣一些拥有良好的机器学习知识背景的程序开发工程师.本文将介绍一些目前流行的.强大的基于Java的机器学习库,希望给大家 ...

  3. 20Flutter通过TabController定义顶部tab切换,介绍生命周期函数

    基本使用: import 'package:flutter/material.dart'; class TabBarControllerPage extends StatefulWidget { Ta ...

  4. Sass(Syntactically Awesome Stylesheets)——概述(待续)

    官网地址:http://sass.bootcss.com/ Sass(Syntactically Awesome Stylesheets) Sass 是成熟.稳定.强大的 CSS 扩展语言. 特征 兼 ...

  5. jmeter -- beanshell 执行本地py文件

    Process proc = Runtime.getRuntime().exec("python /Users/lucax/Desktop/工作/Ai双师项目/性能优化迭代_脚本准备/获取学 ...

  6. 123457123457#0#-----com.cym.shuXueWangGuo1--前拼后广--儿童数学

    123456123456#1#-----com.cym.shuXueWangGuo1--前拼后广--儿童数学

  7. PAT 甲级 1051 Pop Sequence (25 分)(模拟栈,较简单)

    1051 Pop Sequence (25 分)   Given a stack which can keep M numbers at most. Push N numbers in the ord ...

  8. Python SciPy库——插值与拟合

    插值与拟合 原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 # -*- coding: utf-8 -*- import numpy a ...

  9. Linux——定时任务crontab

    linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题. cron介绍 我们经常使用的是crontab命令是cron table的简写,它是cron的配 ...

  10. (十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用

    一.JDBC相关概念介绍 1.1 JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习 ...