一起学SF框架系列附-Springframework源码学习总结

news2024/10/7 14:27:46

学习过程

学习Springframework6.0.8,前后将近4个月终于结束了。学习主要内容如图(红框):
在这里插入图片描述

本次学习主要针对核心模块:Beans、Context、Core、SpEL(完全独立于框架的,没深入学习)、AOP,以SF应用的初始化过程为轴线,较深入了解了Spring的核心技术dependency injection, events, resources, i18n, validation, data binding, type conversion, SpEL, AOP。

学习方法总结

1、采用应用跟踪方法为主,即编写最简单应用,然后以应用容器ClassPathApplicationContext初始化为起点,跟踪初始化全过程:容器初始化、加载资源、加载Bean定义及Bean初始化;同时把初始化过程同各个技术结合点入手,跟进具体技术如何实现。个人认为这种方法最有效的特点就是实现和结果印证,有助于对框架的理解。
2、学习过程中仅仅看源码是远远不够,还需要到做如下几点:
2.1 用UML工具画类关系图,这样才容易建立相关点的整体印象。
2.2 画关键过程的时序图,有助于清晰执行过程及跳转关系。
2.3 做笔记,可以文档形式或博客形式。特别是源码逐行注释非常有助于理解框架。
2.4 反复阅读,并反复修正2.1-2.3所做的事。
2.5 坚持:开始阶段读源码会非常难受,不停的跳转好像进入了迷宫,这时只有坚持才能解决。

Springframework认识总结

1、Springframework发展到6.0.8,系统复杂性很高,从类个数可见一般:
Beans: 313个类
Context: 517个类
Core: 634个类
SpEL: 110个类
AOP: 203个类

2、Spring提供了依赖导致能力,其框架本身也是坚持依赖导致:接口先行。其具体好处如下:
2.1 接口先行,是框架提供扩展能力的基础机制。扩展不可使应用介入或使用展框能力,同时支持扩展框架本身。
2.2 标记接口使用:标记接口指接口没有任何方法,仅代表某类抽象程度很高的事情。如Aware接口就是典型标记接口,代表应用可以感知(获取)应用某一个方法的能力(如ApplicationContextAware、EnvironmentAware、ResourceLoaderAware、MessageSourceAware…)
2.3 接口解决多继承问题:如应用容器(ApplicationContext)作为应用运行的环境,需要包括很多不同的东西,通过接口就可以统一起来,见下图:
在这里插入图片描述

3、类继承层次深:层次5个以上是常见的,超过9个(含接口)也不罕见。这样的优点是非常符合OOD原则,易于修改和扩展;缺点是程序复杂性大大提高。常见阅读障碍是:继承层次中间某一个方法的实现是抽象的或空方法体,具体实现在子孙类中,这时需要手工去找这个实现方法体。例图如下:
在这里插入图片描述

4、Spring提供的扩展机制,框架本身也是用这个进行扩展。如Bean实例化和初始化过程有很多扩展点,不仅应用可利用这些扩展点利用框架能力,而且框架本身就是这样使用的,如解析BeanDefinition实现中,标准命名空间(bean)解析是默认的,非标准命名空间(如context、aop等)是定制入口,不同元素入口对应不同的解析实现,例如context:annotation-config和context:component-scan对应不同的实现,前者对应解析器AnnotationConfigBeanDefinitionParser,后者对应解析器ComponentScanBeanDefinitionParser。这样优点当然是非常优雅的实现了扩展机制,难点程序可读性下降很多,阅读者如果不通过跟踪调试方式,甚至找不到正确的解析器。例图如下:
在这里插入图片描述

学习收获

通过系统阅读框架源码,提升了如下方面的能力:
1、解决应用问题能力:随着对框架认识加深,提高了对基于框架的应用问题的解决能力。
2、提升设计能力:学习框架实现,探究背后的设计原因,可提升自己对应用系统设计和重构能力。
3、学习优秀的编码风格:基本上所有的类、属性、方法均有注释,其中接口注释更详细。所有注释均符合JavaDoc规范。
4、学习优秀的框架,可以扩大阅读者技术眼界,直观体验业界大牛是如何解决问题的。

至此,本次学习就算结束了。虽然这次学习基本搞懂了Springframework是如何实现的,但由于个人精力有限,加之框架的复杂性,导致泛泛阅读的源码大约只有一半,精读可能只有四分之一;对于源码理解的正确性、准确性也不能保证100%,不得不说这是不小的遗憾。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

习题练习 C语言(暑期第二弹)

编程能力小提升! 前言一、表达式判断二、Assii码的理解应用三、循环跳出判断四、数字在升序数组中出现的次数五、整数转换六、循环语句的应用七、函数调用八、两个数组的交集九、C语言基础十、图片整理十一、数组的引用十二、数组的引用十三、字符个数统计十四、多数…

最详细jdk安装以及配置环境(保姆级教程)

一.进入oracle官网,下载jdk oracle官网:Oracle | Cloud Applications and Cloud Platform ps:不同的浏览器,可能进入oracle官网,会只显示部分内容,所以建议使用google Chrome浏览器 在下载之前,首先需要去…

Easy Deal.mt4 9月版--v3.5(含EA)

总结:复盘 8月1日~27日,盈利11%(可放大10倍),但整体回撤还是比较大,有待优化。 在这一版里,ED基本逻辑为: 1、第1单以heiken ashi smoothed趋势指标判断入场。(使用1分钟图&#xf…

ssm校园快递一站式服务系统源码和论文

ssm校园快递一站式服务系统源码和论文076 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 选题的目的和意义: 目的: 校园快递一站式服务系统的研究目的有两个,一个为校园及…

深度学习怎么学?

推荐这本小白看的《深度学习:从基础到实践(上下册)》。 深度学习:从基础到实践(上下册) 深入浅出的讲述了深度学习的基本概念与理论知识,不涉及复杂的数学内容,零基础小白也能轻松掌…

移动硬盘出现两份多个分区并无法使用的情况

文章目录 问题描述解决方案发现问题 问题描述 移动硬盘借给组内同学装Ubuntu之后,出现多个分区,windows10操作系统识别到两个分区并且无法读取,并且出现格式化提醒,但是由于只读属性,而无法格式化的情况。注意这两个分…

【Java 中级】一文精通 Spring MVC - 转发重定向(四)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【Mybatis】MybatisPlus轻松实现数据动态可配置热脱敏

文章目录 前言一、数据1.1、mybatis-plus 统一字段管理1.2、Map 映射如何实现字段自动填充1.3、数据权限1.4、TenantLineInnerInterceptor 的升级改造1.5、TenantLineInnerInterceptor 改造 21.6、数据权限改造 3 二、数据脱敏三、TypeHander总结 前言 网站开发功能是否全面是…

【Java 中级】一文精通 Spring MVC - 标签库 (八)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【JAVA基础——static关键字】

JAVA基础 static关键字 文章目录 JAVA基础概述静态成员与加载顺序 概述 static 变量:static变量由该类的所有对象共享,不需要创建对象也可使用。static 方法:允许直接访问,不需要创建对象也可被调用。如 main 方法。static 初始…

华为OD机试 - 求字符串中所有整数的最小和 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

一个免费好用的全域数据集成平台

文章目录 全域数据集成平台RestCloud一、产品架构一、数据源管理二、离线数据集成三、实时数据集成四、监控中心五、对比总结六、离线数据集成实战1.新建mysql数据源2.离线数据集成3.执行同步数据 大家好,我是脚丫先生 (o^^o) 小伙伴们都知道,在之前数据…

无涯教程-机器学习 - 矩阵图函数

相关性是有关两个变量之间变化的指示,在前面的章节中,无涯教程讨论了Pearson的相关系数以及相关的重要性,可以绘制相关矩阵以显示哪个变量相对于另一个变量具有较高或较低的相关性。 在以下示例中,Python脚本将为Pima印度糖尿病数…

VMware虚拟机的安装以及安装CentOS系统

VMware虚拟机是一款非常受欢迎的虚拟化软件,它可以模拟一台计算机运行在另一台计算机上,从而实现在一台物理机器上运行多个虚拟机的目的。在本文中,我们将会介绍如何安装VMware虚拟机并在其中安装CentOS操作系统。 文章目录 📀VMw…

Linux用户与组管理(03)(八)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、组管理 1、概述 2、用户信息查看 总结 前言 今天是学习用户与组管理的最后一节课,这节课主要是组管理的内容,希望能一起学习&#xff…

跨足多领域:人脸美颜SDK在医疗、娱乐和安全中的应用案例

随着科技的不断发展,人脸美颜技术不再局限于满足用户的审美需求,而是在医疗、娱乐和安全领域展现出了广泛的应用前景。本文将深入探讨人脸美颜SDK 在这三个领域中的创新应用案例,展示其在不同场景中的独特价值和潜力。 一、医疗领域 1、皮…

Leetcode86. 分隔链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台…

2.3 【MySQL】命令行和配置文件中启动选项的区别

在命令行上指定的绝大部分启动选项都可以放到配置文件中,但是有一些选项是专门为命令行设计的,比方说defaults-extra-file 、 defaults-file 这样的选项本身就是为了指定配置文件路径的,再放在配置文件中使用就没啥意义了。 如果同一个启动选…

winpe还原windows系统备份

准备工作 用大白菜制作一个启动u盘,里面可以镜系统备份文件 插入电脑,启动,按f11(这个快捷键因电脑而异),选择启动u盘,进入winpe 硬盘格式化 选择分区助手软件 选择硬盘,右键选择【…

Spring Bean对象生命周期

文章目录 前言基础通俗理解bean作用域 前言 最近学习spring的一些基础概念,所以就先了解了bean对象的概念,而且发现这个里面涉及到很多的内容,比如在spring中一个bean对象是如何创建以及销毁的这些概念,所以就打算总结一些spring…