不会部署并调试SpringBoot源码?一看必会IDEA操作
专题系列分类:玩转SpringBoot2.x系列教程
前言
你是否遇在面试中遇到如下提问:
面试官:了解过SpringBoot 的源码吗 ?
我:… 没有。
面试官:下一位。
当你从面试公司出来后,你心里默默发誓回去一定要看看 SpringBoot 的源码。但是当你在GitHub clone 源码到本地后,各种操作后编译失败,最终只能选择选择放弃。
本文通过 SpringBoot 的源码Jar 包方式进行查看其源码,并非直接编译SpringBoot 的源码。这样方式比较适合能力尚浅的小伙伴也可能快速查看 SpringBoot 源码。
通过本文你将学习到如下内容:
- 通过 IntelliJ IDEA 创建SpringBoot 项目。
- 通过 IntelliJ IDEA 自动下载源码 Jar 包方式查看源码。
- Debug SpringBoot 源码。
- 对源码添加自定义注释内容。
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操作相关推荐
- Springboot源码分析之内嵌tomcat源码分析
Springboot源码是内嵌tomcat的,这个和完整的tomcat还是不同. 内嵌tomcat的源码在tomcat-embed-core等3个jar包里 展开tomcat-embed-core的c ...
- Git之深入解析如何使用Git调试项目源码中的问题
一.前言 了解了管理或者维护 Git 仓库.实现代码控制所需的大多数日常命令和工作流程,尝试跟了踪和提交文件的基本操作,并且掌握了暂存区和轻量级地分支及合并的威力.如果想进一步对 Git 深入学习,可 ...
- SpringBoot源码笔记分析
SpringBoot源码笔记分析 1.基础 1.配置SpringBoot热部署 1.引入依赖 <dependency><groupId>org.springframework. ...
- Springboot源码分析第一弹 - 自动装配实现
Springboot就不用多了吧,解放Java开发双手的神器. 最显著的特点就是,去配置化,自动装配,自动配置.让开发人员只需要注重业务的开发 今天就来了解一下自动装配的源码是怎么实现的 预先准备 直 ...
- SpringBoot源码分析之内置Servlet容器
原文链接:http://fangjian0423.github.io/2017/05/22/springboot-embedded-servlet-container/ SpringBoot内置了Se ...
- CLion调试redis6源码
背景 clion使用cmake来管理编译redis源码,而redis源码本身使用原生的make,因此直接将redis源码导入clion无法直接运行,需要配置cmake. 写c程序大体步骤为: 1).用 ...
- 深入SpringBoot源码(四)初识Environment
深入SpringBoot源码(四)初识Environment new DefaultApplicationArguments prepareEnvironment getOrCreateEnviron ...
- 调试JDK源码-ConcurrentHashMap实现原理
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...
- 调试JDK源码-一步一步看HashMap怎么Hash和扩容
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hash ...
最新文章
- PYTHON学习笔记-DAY-16
- ADO.NET数据库
- JDK 11上的JavaFX
- 《Windows核心编程》の窗口过程的使用
- autoincrement mysql_SQL AUTO INCREMENT 字段 | 菜鸟教程
- php urledcode_用JavaScript实现PHP的urldecode函数
- java 如何去掉 nbsp_java-如何去掉JFrame上的最大化最小化和关闭按钮
- 简书的css排版,浅谈前端(WEB)排版
- CSS CSS3 pdf 电子书大全 百度云
- Bitwise Operation
- 等高线节点过密如何处理?CASS10.1复合线滤波功能详解
- 【Python机器学习基础教程】(三)
- 数学建模算法 一 简述(3)规划模型-整数规划
- Spring IOC和Bean生命周期以及源码分析
- 英语语法:定语从句讲解
- vue:实现前端生成并下载二维码(使用qrcodejs2插件)
- java 日期转换视频_自定义转换器实现日期转换_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
- DDR1.LPDDR4 DQS VT drift理解
- 初识0day漏洞以及SQL错误盲注
- CSP应用开发-将USBkey中的证书注册到Windows系统
热门文章
- python中怎么取整数案例题_python中如何取整数
- 服务器安装lnmp的时候出现client_loop: send disconnect: Connection reset by peer
- OpenShift 4 - 解决 OpenShift 中 elasticsearch 环境的 Log4j 漏洞
- OpenShift 4 - 用Buildah定制UBI容器镜像
- 使用face-api和Tensorflow.js在浏览器中进行AI年龄估计
- 大型Lambda的C# 泊松累积分布
- arduino支持python吗_python能给arduino的板子编程吗?stm32支持吗?什么游戏引擎支持python?...
- java的jdk是什么_什么是jdk?
- matlab销量预测的数学模型,数学建模:酒店最优化问题.用matlab算出《酒店价格预测模型》...
- anki 新的卡片类型_用 Anki 建立高效复习错题体系