笔记要求

  • 了解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. flink实时数仓从入门到实战

    第一章.flink实时数仓入门 一.依赖 <!--Licensed to the Apache Software Foundation (ASF) under oneor more contri ...

  2. 一行代码让你的python运行速度提高100倍

    转自:https://www.cnblogs.com/xihuineng/p/10630116.html 加上之后运行速度快了十倍,我的天呐. python一直被病垢运行速度太慢,但是实际上pytho ...

  3. 使用ansible实现批量免密认证

    一.目的 批量实现免密认证,适合管理大批量机器使用 二.步骤 1-1.第一种方式:收集被控制主机的公钥,用于构建并验证ssh_known_hosts # ssh-keyscan 10.246.151. ...

  4. C#基础——IO

    最近一直忙着做项目,偶尔会碰到一些文件读写方面的需求,当我回忆读写的代码时,发现脑子里存在诸多空白.这是不妙的,于是连忙翻出以前记下的笔记,上面还存在着我当初写下的知识点.怕以后哪天笔记找不到了或者有 ...

  5. v-if和v-show的使用和特点

    v-if的特点是每次都会重新删除或创建操作 v-show的特点是每次不会进行DOM的删除和创建操作,只是切换了元素的display:none样式 <div id="app"& ...

  6. IDEA SonarLint安装及使用

    SonarLint插件安装IDEA菜单栏选择File->Settings,左边栏选择Plugins 在线安装选择Browse repositories,搜索Sonar,选择SonarLint进行 ...

  7. java集合--模拟斗地主发牌洗牌

    import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...

  8. 【转载】提高访问 github 的速度

    原文地址:https://www.cnblogs.com/liuchao888/p/11733996.html 工具地址:http://tool.chinaz.com/dns?type=1&h ...

  9. Python学习笔记——基础语法篇

    一.Python初识(IDE环境及基本语法,Spyder快捷方式) Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,没有编译过程,可移植,可嵌入,可扩展. IDE 1.检查Pyth ...

  10. Python实用笔记 (26)面向对象高级编程——定制类

    Python的class允许定义许多定制方法,可以让我们非常方便地生成特定的类.以下是集中常见的定制方法: 怎么才能打印得好看呢?只需要定义好__str__()方法,返回一个好看的字符串就可以了: _ ...