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程序员必备的技能。
tiny-Spring【2】逐步step分析-新加入特性的更多相关文章
- Spring Ioc源码分析系列--Ioc源码入口分析
Spring Ioc源码分析系列--Ioc源码入口分析 本系列文章代码基于Spring Framework 5.2.x 前言 上一篇文章Spring Ioc源码分析系列--Ioc的基础知识准备介绍了I ...
- spring事务源码分析结合mybatis源码(一)
最近想提升,苦逼程序猿,想了想还是拿最熟悉,之前也一直想看但没看的spring源码来看吧,正好最近在弄事务这部分的东西,就看了下,同时写下随笔记录下,以备后查. spring tx源码分析 这里只分析 ...
- Spring Boot 入门详细分析
推荐阅读: 我们为什么要学习 Spring Boot 我们搭建 Spring Boot 项目,可以使用 Spring 为我们提供的初始化网站,那个可能不太方便,今天呢,我们就来说说如何使用 IDEA ...
- Spring IOC 源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文 ...
- Spring AMQP 源码分析 02 - CachingConnectionFactory
### 准备 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理 ## 前置知识 <Spring AMQP 源码分析 01 - Impatie ...
- Spring事务管理全面分析
Spring 事务属性分析什么是事物 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常 ...
- Spring处理@Configuration的分析
Spring处理@Configuration的分析 声明:本文若有任何纰漏.错误,还请不吝指出! 序言 @Configuration注解在SpringBoot中作用很大,且不说SpringBoot中的 ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 5.2 Spring5源码--Spring AOP源码分析二
目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博 ...
随机推荐
- linux内核是如何支持深度睡眠(deep sleep)方式的?
1. 硬件架构 arm64 2. 内核版本 4.19 3. 分析相关函数 setup_arch() -> psci_dt_init() -> psci_0_2_init() -> g ...
- Java并发包线程池之ForkJoinPool即ForkJoin框架(二)
前言 前面介绍了ForkJoinPool相关的两个类ForkJoinTask.ForkJoinWorkerThread,现在开始了解ForkJoinPool.ForkJoinPool也是实现了Exec ...
- php接口数据安全解决方案(一)
前言 目录介绍 登录鉴权图 接口请求安全性校验整体流程图 代码展示 演示用户登录 演示获取用户信息 文章完整代码地址 后记 前言 目的: 1.实现前后端代码分离,分布式部署 2.利用token替代se ...
- MySQL数据库之sql_mode解释
在MySQL5.6中,默认的SQL模式为:NO_ENGINE_SUBSTITUTION, 而在MySQL5.7中默认的SQL模式为:ONLY_FULL_GROUP_BY, STRICT_TRANS_T ...
- 怎样加入社区项目Karbor的Review?
Review是社区衡量一个贡献者的重要标准. Review步骤: 1.登录Karbor Review地址: https://review.openstack.org/#/q/Karbor 这里可以看到 ...
- java大文件下载+断点续传
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路:1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...
- tornado之自定义form表单验证
直接上链接吧:银角的地址 源码下载链接:点我点我点我...
- iOS-SDWebImage使用(转)
SDWebImage提供了如下三个category来进行缓存. MKAnnotationView(WebCache) UIButton(WebCache) UIImageView(WebCache) ...
- 欧姆龙 EntherNet/IP(CIP报文格式)
Enthip/IP_ CIP报文格式 测试Demo在文章末尾 注册请求帧: 0x65 0x00 注册请求命令 2byte 0x04,0x00 header长度2byte < 封装头& ...
- Direct2D 学习笔记(3)图层 Layer
利用图层Layer绘制资源网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-layers-overview 1 ...