专题系列分类:玩转SpringBoot2.x系列教程

前言

你是否遇在面试中遇到如下提问:

面试官:了解过SpringBoot 的源码吗 ?
我:… 没有。
面试官:下一位。

当你从面试公司出来后,你心里默默发誓回去一定要看看 SpringBoot 的源码。但是当你在GitHub clone 源码到本地后,各种操作后编译失败,最终只能选择选择放弃。

本文通过 SpringBoot 的源码Jar 包方式进行查看其源码,并非直接编译SpringBoot 的源码。这样方式比较适合能力尚浅的小伙伴也可能快速查看 SpringBoot 源码。

通过本文你将学习到如下内容:

  1. 通过 IntelliJ IDEA 创建SpringBoot 项目。
  2. 通过 IntelliJ IDEA 自动下载源码 Jar 包方式查看源码。
  3. Debug SpringBoot 源码。
  4. 对源码添加自定义注释内容。

IDEA 部署SpringBoot 源码实操

搭建 SpringBoot 环境

第一步:创建 Project 并配置Maven 环境。

首先启动IDEA 点击Create New Project

选择 Empty Project 创建空的项目 (这里的Project 相当于Eclipse的工作空间)

设置 项目名称和项目路径,然后点击 Finish


创建成功后要配置我们自己本地安装 Maven 点击 File->Settings 如下图所示:

依次点击菜单选项: Build Execution Deployment - Build Tools - Maven 进行设置。

  • Maven home directory : 选择自己本地 Maven 安装的目录
  • User settings file: Maven 安装目录 settings.xml的路径
  • Local repository: 这个会根据你选择的 Maven 安装目录 settings.xml的路径 自动生成。

第二步:搭建 SpringBoot 项目

首先点击File->New->Module

点击 Spring Initializr 然后在选择 JDK 版本在 Module SDK处,如果没有就点击右边的New 新增一个JDK。最后点击Next

配置SpringBoot 项目的 Group、Artifact 等信息 ,然后点击Next


选择 Web 模块然后点击Next

配置 SpringBoot 项目的名称和路径地址,然后点击Finish


将 .mvn 文件夹、mvnw文件、mvnw.cmd文件删除掉。

搜索SpringBoot 源码类并打断点调试

通过快捷键 Ctrl+N 搜索 AbstractApplicationContext (Spring上下文核心处理类)

Springboot 默认会帮我们下载源码jar包

refresh() 方法并在方法内打一个断点。

通过Debug的方式进行启动 具体操作如下图:

启动项目就走入到了在AbstractApplicationContext refresh() 断点上,如下图所示:

到这里调试 SpringBoot 源码操作完毕!

如果不能进入调试就进行如下图的操作:将如下图中org处勾选取消掉即可。

对源码添加自定义注释内容

如下图所示将鼠标悬浮在 AbstractApplicationContext 上显示出源码 jar 包具体路径。

进入本地安装Maven仓库并创建和源码jar包一样名称的文件夹, 然后将源码 jar包解压到文件夹中。


点击 File->Project Structure,进行修改 IDEA SpringBoot源码路径操作。

点击 Modules 然后选择 AbstractApplicationContex 所在的 Maven依赖,然后双击。

选中Sources 然后点击+号 将包含源码的文件夹中加入到Sources


然后将源码的 jar包删除,如下图所示:

最后点击 OK 修改 IDEA SpringBoot源码路径操作完毕。

将鼠标悬浮在 AbstractApplicationContext 上查看此时源码的路径,如下图所示表示已经切换到源码文件夹下的路径了。

修改源码中的内容在我们的IDEA中。如下图所示:

在我们解压的源码文件夹AbstractApplicationContext .java 也同步修改了。

到这里源码自定义注释操作介绍完毕。

小结

是不是很简单呢?抓紧行动起来开始你的 SpringBoot 源码之旅吧!

参考文献

CSDN博主荒野雄兵:IDEA调试JDK源码的详细过程https://blog.csdn.net/daerzei/article/details/79717717

不会部署并调试SpringBoot源码?一看必会IDEA操作相关推荐

  1. Springboot源码分析之内嵌tomcat源码分析

    Springboot源码是内嵌tomcat的,这个和完整的tomcat还是不同. 内嵌tomcat的源码在tomcat-embed-core等3个jar包里 展开tomcat-embed-core的c ...

  2. Git之深入解析如何使用Git调试项目源码中的问题

    一.前言 了解了管理或者维护 Git 仓库.实现代码控制所需的大多数日常命令和工作流程,尝试跟了踪和提交文件的基本操作,并且掌握了暂存区和轻量级地分支及合并的威力.如果想进一步对 Git 深入学习,可 ...

  3. SpringBoot源码笔记分析

    SpringBoot源码笔记分析 1.基础 1.配置SpringBoot热部署 1.引入依赖 <dependency><groupId>org.springframework. ...

  4. Springboot源码分析第一弹 - 自动装配实现

    Springboot就不用多了吧,解放Java开发双手的神器. 最显著的特点就是,去配置化,自动装配,自动配置.让开发人员只需要注重业务的开发 今天就来了解一下自动装配的源码是怎么实现的 预先准备 直 ...

  5. SpringBoot源码分析之内置Servlet容器

    原文链接:http://fangjian0423.github.io/2017/05/22/springboot-embedded-servlet-container/ SpringBoot内置了Se ...

  6. CLion调试redis6源码

    背景 clion使用cmake来管理编译redis源码,而redis源码本身使用原生的make,因此直接将redis源码导入clion无法直接运行,需要配置cmake. 写c程序大体步骤为: 1).用 ...

  7. 深入SpringBoot源码(四)初识Environment

    深入SpringBoot源码(四)初识Environment new DefaultApplicationArguments prepareEnvironment getOrCreateEnviron ...

  8. 调试JDK源码-ConcurrentHashMap实现原理

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

  9. 调试JDK源码-一步一步看HashMap怎么Hash和扩容

    调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...

最新文章

  1. PYTHON学习笔记-DAY-16
  2. ADO.NET数据库
  3. JDK 11上的JavaFX
  4. 《Windows核心编程》の窗口过程的使用
  5. autoincrement mysql_SQL AUTO INCREMENT 字段 | 菜鸟教程
  6. php urledcode_用JavaScript实现PHP的urldecode函数
  7. java 如何去掉 nbsp_java-如何去掉JFrame上的最大化最小化和关闭按钮
  8. 简书的css排版,浅谈前端(WEB)排版
  9. CSS CSS3 pdf 电子书大全 百度云
  10. Bitwise Operation
  11. 等高线节点过密如何处理?CASS10.1复合线滤波功能详解
  12. 【Python机器学习基础教程】(三)
  13. 数学建模算法 一 简述(3)规划模型-整数规划
  14. Spring IOC和Bean生命周期以及源码分析
  15. 英语语法:定语从句讲解
  16. vue:实现前端生成并下载二维码(使用qrcodejs2插件)
  17. java 日期转换视频_自定义转换器实现日期转换_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
  18. DDR1.LPDDR4 DQS VT drift理解
  19. 初识0day漏洞以及SQL错误盲注
  20. CSP应用开发-将USBkey中的证书注册到Windows系统

热门文章

  1. python中怎么取整数案例题_python中如何取整数
  2. 服务器安装lnmp的时候出现client_loop: send disconnect: Connection reset by peer
  3. OpenShift 4 - 解决 OpenShift 中 elasticsearch 环境的 Log4j 漏洞
  4. OpenShift 4 - 用Buildah定制UBI容器镜像
  5. 使用face-api和Tensorflow.js在浏览器中进行AI年龄估计
  6. 大型Lambda的C# 泊松累积分布
  7. arduino支持python吗_python能给arduino的板子编程吗?stm32支持吗?什么游戏引擎支持python?...
  8. java的jdk是什么_什么是jdk?
  9. matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...
  10. anki 新的卡片类型_用 Anki 建立高效复习错题体系