笔记要求

  • 了解Java语言
  • 了解Spring Framework的基础
  • 会使用Maven

关于本笔记

起因

  1. 本职数据分析,为公司内部人员开发数据处理系统,使用了Python/Django+Bootstrap的选型,完成后不甚满意,便试着学习C#,第一次接触C#的Web框架完全懵了,后来才转向Java,有了懵过之后的C#/Web资料经验,大概明白了Spring Framework的门道,发现Spring其实应该与C#/Web差不多吧。
  2. 大概明白了Spring Springwork的编写,到使用Spring Security时,嗯~复制这段配置代码到这里确实可以运行起来;咦?我怎么配置才能达到这种要求?
  3. 开始搜索Spring Security资料,对于其原理的解释,或太深或太浅或仅在概念层次,于是想深挖其详细原理。使用我心爱的Chrome浏览器到打开Spring Security官网文档,右上角的翻译按钮正待蠢蠢欲动,我的天!那么多!不管了,开始读,咦?怎么搞的,好多概念上的东西。不是我想要的,于是想着开始阅读源码。
  4. 在几个月以前就试着读源码,但是到昨天才感觉到自己会看源码。

该笔记水平

  • 不怎么地
  • 但不能保证该笔记面向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源码笔记之零:阅读源码的更多相关文章

  1. JDK1.8源码分析02之阅读源码顺序

    序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...

  2. Java工程师阅读源码的一些见解

    一.为何阅读源码 就是说,通过阅读源码能给你带来什么好处. 学习如何从需求-设计-实现,开阔你的思维,提升你的架构设计能力: 帮助更好地理解原理和架构设计: 帮助更快地定位线上问题BUG 可以根据自己 ...

  3. petite-vue源码剖析-为什么要读源码?

    什么是petite-vue? 根据官方解释,petite-vue是专门为非前后端分离的历史项目提供和Vue相近的响应式开发模式. 与完整的Vue相比最大的特点是,面对数据的变化petite-vue采取 ...

  4. Spring源码解析——如何阅读源码(转)

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

  5. Spring源码解析——如何阅读源码

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

  6. 厉害!这份阿里面试官 甩出的Spring源码笔记,GitHub上已经爆火

    前言 时至今日,Spring 在 Java 生态系统与就业市场上,面试出镜率之高,投产规模之广,无出其右.随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础 ...

  7. Golang构建HTTP服务(一)--- net/http库源码笔记

    搭建一个简单的Go Web服务器 Go语言标准库 - net/http 在学习Go语言有一个很好的起点,Go语言官方文档很详细,今天我们学习的Go Web服务器的搭建就需要用到Go语言官方提供的标准库 ...

  8. 线程池 ThreadPoolExecutor 原理及源码笔记

    前言 前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理. 公众号 ...

  9. 从SpringBoot启动,阅读源码设计

    目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...

随机推荐

  1. 4-react 组件之间传值。

    1.传值: 都是使用props和state结合得方式进行组件之间得传值 再react中传值得话是父子组件之间得传值,一般会把父组件中得state值通过props传给子组件,再子组件中使用props进行 ...

  2. [apue] 一个快速确定新系统上各类限制值的工具

    对于在不同 Unix 系统之间移植程序,最重要的事情就是确定新系统的一些编译时.运行时固定或不固定的限制值了.例如文件路径最大长度 PATH_MAX.进程最大可打开文件句柄数 OPEN_MAX.用户可 ...

  3. C++ 进阶 模板和STL

    C++提高编程 本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用 1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只 ...

  4. rust 编码模式

    ➜ hello_cargo git:(master) ✗ rustc --print code-models Available code models: small kernel medium la ...

  5. HTML躬行记(1)——SVG

    <svg>是矢量图的根元素,通过xmlns属性声明命名空间,从而告诉用户代理标记名称属于哪个XML方言.在下面的示例中,为<svg>元素声明了宽度和高度(默认以像素为单位),其 ...

  6. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  7. C# CLosedXML四句代码搞定DataTable数据导出到Excel

    最近用到DataTable导出到Excel,网上看了一下,都不怎么好使,逛了下GitHub一下完美解决了 用到的.net库CLosedXML,这个库用于读取,处理和写入Excel 2007+(.xls ...

  8. BERT的前世今生

    Transformer Transformer来自论文: All Attention Is You Need 别人的总结资源: 谷歌官方AI博客: Transformer: A Novel Neura ...

  9. mybatis缓存之一级缓存(二)

    这篇文章介绍下mybatis的一级缓存的生命周期 一级缓存的产生 一级缓存的产生,并不是看mappper的xml文件的select方法,看下面的例子 mapper.xml <select id= ...

  10. Matlab矩阵间快速赋值方法

    目前还没见到网上用过这个简单的方式 A= [1 2 3; 4 5 6; 7 8 9] B = zeros(5,5) B(1:3, 2:4) = A     %将A赋值到B的第1行到3行,第2列岛4列, ...