【初学】Spring源码笔记之零:阅读源码
笔记要求
- 了解
Java语言 - 了解
Spring Framework的基础 - 会使用Maven
关于本笔记
起因
- 本职数据分析,为公司内部人员开发数据处理系统,使用了Python/Django+Bootstrap的选型,完成后不甚满意,便试着学习C#,第一次接触C#的Web框架完全懵了,后来才转向Java,有了懵过之后的C#/Web资料经验,大概明白了Spring Framework的门道,发现Spring其实应该与C#/Web差不多吧。
- 大概明白了Spring Springwork的编写,到使用Spring Security时,嗯~复制这段配置代码到这里确实可以运行起来;咦?我怎么配置才能达到这种要求?
- 开始搜索Spring Security资料,对于其原理的解释,或太深或太浅或仅在概念层次,于是想深挖其详细原理。使用我心爱的Chrome浏览器到打开Spring Security官网文档,右上角的翻译按钮正待蠢蠢欲动,我的天!那么多!不管了,开始读,咦?怎么搞的,好多概念上的东西。不是我想要的,于是想着开始阅读源码。
- 在几个月以前就试着读源码,但是到昨天才感觉到自己会看源码。
该笔记水平
- 不怎么地
- 但不能保证该笔记面向Spring的初学者
源码初次阅读技巧
不知道能不能适用于别人。
由于在笔记中不会详细介绍Spring的基础,要求可以看懂以下示例代码
1. 定一个目标
即为什么要读源码?想从源码中得到什么?
比如在一些Spring基础资料中常出现的使用ApplicationContext获取Bean的示例。
// https://gitee.com/exidot/ssn/blob/master/sf5/src/main/java/cn/exidot/ssn/sf5/Main.java
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application_context.xml");
Duck duck = context.getBean("duck", Duck.class);
duck.tryFly();
}
}
那么问题来了:
- BeanFactory作为Spring概念中的一个核心概念,与ApplicationContext的关系是怎样的?
- Spring Framework框架是如何实现的ApplicationContext?
- ClassPathXmlApplicationContext是如何解析application_context.xml和加载Bean的?
- 关于单例Bean与Prototype多例Bean在Spring中的生命周期如何?
- ...
2. 查看相关类继承结构
作为初学,学习ApplicationContext,需要先找到它的一个实现类,从实现类入手会更容易。
这是用Idea生成的ClassPathXmlApplicationContext类图:

3. 先大概看一下类图结构,从上而下依次阅读源码
我的阅读方式是:
- 在官网API Doc文档先查看各字段与函数的代码文档(源码中也有,但是复制到Google 翻译中会存在注释符号)
- 然后在Idea中查看源码实现
- 在阅读函数等代码时,遇到不懂的类跟进去查看
- 注意你阅读源码想要得到的知识,不必跟读的过分细致。
4. 记录学习知识
学习之后整理下源码内容,捋一下思路。
【初学】Spring源码笔记之零:阅读源码的更多相关文章
- JDK1.8源码分析02之阅读源码顺序
序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...
- Java工程师阅读源码的一些见解
一.为何阅读源码 就是说,通过阅读源码能给你带来什么好处. 学习如何从需求-设计-实现,开阔你的思维,提升你的架构设计能力: 帮助更好地理解原理和架构设计: 帮助更快地定位线上问题BUG 可以根据自己 ...
- petite-vue源码剖析-为什么要读源码?
什么是petite-vue? 根据官方解释,petite-vue是专门为非前后端分离的历史项目提供和Vue相近的响应式开发模式. 与完整的Vue相比最大的特点是,面对数据的变化petite-vue采取 ...
- Spring源码解析——如何阅读源码(转)
最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...
- Spring源码解析——如何阅读源码
最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...
- 厉害!这份阿里面试官 甩出的Spring源码笔记,GitHub上已经爆火
前言 时至今日,Spring 在 Java 生态系统与就业市场上,面试出镜率之高,投产规模之广,无出其右.随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础 ...
- Golang构建HTTP服务(一)--- net/http库源码笔记
搭建一个简单的Go Web服务器 Go语言标准库 - net/http 在学习Go语言有一个很好的起点,Go语言官方文档很详细,今天我们学习的Go Web服务器的搭建就需要用到Go语言官方提供的标准库 ...
- 线程池 ThreadPoolExecutor 原理及源码笔记
前言 前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理. 公众号 ...
- 从SpringBoot启动,阅读源码设计
目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...
随机推荐
- 09.Django-信号
目录 Django中的信号及其用法 Django中内置的signal 内置信号的使用 自定义信号 Django中的信号及其用法 Django中提供了"信号调度",用于在框架执行操作 ...
- 自动完成 APP【字典树(Trie树)+dfs】
自动完成 APP 传送门 来源:upc12786 题目描述 奶牛 Bessie 很喜欢用手机上网聊天,但她的蹄子太大,经常会按到好几个键造成不必要的麻烦(丢死人了,你下辈子还是不要当奶牛了).于是 ...
- Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
笔者csdn博客同文地址:https://blog.csdn.net/weixin_45791445/article/details/106597515 我是小康小白,一个平平无奇的Java小白.热爱 ...
- 0.1---selenium+java自动化测试进阶02----项目实战之登录代码重构
一.测试登录功能实现 以慕课网的登录为例,分析登录的功能需求,编写测试用例,找到要定位的元素以及需要的操作,编写登录功能的测试代码.代码实现如下: public static void main(St ...
- BUAA_OO_2020_Unit4_总结博客
BUAA_OO_2020_Unit4_总结 2020年春季学期第十六周,OO第四单元即最终章落下帷幕,本单元是利用Java进行UML类图的解析,完成对类图.顺序图.状态图的内部查询操作与简单的规则判断 ...
- 线程基础8-quene讲解
PriorityBlockingQueue是一个基于优先级堆的无界的并发安全的优先级队列(FIFO),队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取 ...
- Typora及Markdown的介绍及使用
Typora及Markdown的介绍及使用 Typora是一款免费的Markdown编辑器,Typora不像其他Markdown编辑器一样使用一边代码一边预览的方式,而是写完代码之后直接出效果,所见即 ...
- Docker搭建Rancher平台
sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server service docker resatrt启动失败 ...
- Validate日期校验
public class Validate { private static Regex RegNumber = new Regex("^[0-9]+$"); private st ...
- dart快速入门教程 (2)
2.变量和数据类型 2.1.变量和常量 变量通俗的说就是可以变化的量,作用就是用来存储数据,你可以把一个变量看作是一个水果篮,里面可以装苹果.梨.香蕉等,常量就是一个固定的值,和变量是相对的,变量可以 ...