笔记要求

  • 了解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. Nginx源码编译安装选项

    [Nginx源码编译过程] make是用来编译的,它从Makefile中读取指令,然后编译. make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置. configu ...

  2. Nice Jquery Validator 常用规则整理

    一些简单规则 numeric: [/^[0-9]*$/, '请填写数值'], money: [/^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/, "请填写有效的金额" ...

  3. MySQL数据库基础知识复习

    现在是2020年寒假,这也是新年写的第一篇博客,用了十几天的时间自学了数据库基础部分,想总结一下得失同时并通过写博客来复习前面学的知识点. 个人: 1.本来是计划一周学完基础部分的178p但没能完成这 ...

  4. mysql字符串类型(char,varchar)

    原文链接:https://blog.csdn.net/puqutogether/article/details/45648879 MySQL中的字符串有两个常用的类型:char和varchar,二者各 ...

  5. GetLastError返回值含义

    GetLastError的返回值的含义: (0)-操作成功完成. (1)-功能错误. (2)- 系统找不到指定的文件. (3)-系统找不到指定的路径. (4)-系统无法打开文件. (5)-拒绝访问. ...

  6. MFC_VC++_时间获取与保存列表控件内容到文件操作方法

    MFC_VC++_时间获取与保存列表控件内容到excel文件操作方法 void CDataView::OnBnClickedBtnExporttoexcel() { CTime time = CTim ...

  7. S7-1200视频教程: S7-1200的功能与特点-跟我做 - 2/112

    S7-1200视频教程: S7-1200的功能与特点-跟我做 - 2/112 观看连接: http://www.elearning.siemens.com.cn/video/Course/201105 ...

  8. 采用Socket实现UDP

    ------------恢复内容开始------------ 1.1采用Socket实现UDP1.1.1简介 Socket实现UDP的基本步骤如下: (1)创建一个Socket对象 Socket my ...

  9. Nginx具体配置(三)

    一:Nginx配置实例 - 反向代理 实例一: 1.1:实现效果 在Windows浏览器地址栏中输入www.123.com,跳转到Linux系统中的tomcat主页面 访问Nginx:192.168. ...

  10. 关于SPSS Modeler18 提示:用于定义的观测值的字段的值无效

    今天在做实验的时候,按照实验步骤严格设置了参数,当运行节点的时候,一直提示:用于定义的观测值的字段的值无效,如下图 我把我的流文件发给同学,同学的机器上是可以运行的,但是我的不行,不知道什么原因,有知 ...