spring.factories
================
在了解了 Springboot 的自动装配原理 后(不了解可以看看 4ye 之前写的这篇 《Springboot自动装配原理探索》),我们直接打开 spring-boot-devtools 源码 ,找到 spring.factories 文件,
我们一般都本地开发调试的,所以就直接看这个
LocalDevToolsAutoConfiguration 类啦
LocalDevToolsAutoConfiguration
======
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
========================
可以看到核心点在 重启和重载
主角
==
我们先来看看这个 重启 中有什么叭
重启原理介绍
======
大概这么一个思路 下面就跟着源码分析啦(文末有源码重启要点流程图)
RestartConfiguration
====================
有这么些方法
从名字上分析,这两个方法应该是重点,逻辑上应该是 有一个 watcher 在盯着 classpath ,如果有变动的话,就触发这个 ClassPathChangedEvent 事件
那么看看这个 watcher 叭
ClassPathFileSystemWatcher
==========================
可以看到这里就创建了这个
ClassPathFileSystemWatcher 类
这里我们注意到它实现了三个接口,经过前面 Spring 文章的学习,咱们知道第一步就该看啥了
《16张图解锁Spring的整体脉络》
根据类的初始化,先看看有 static 相关的代码没,接着看 构造器 ,最后就来到这个初始化方法 afterPropertiesSet 啦
这里没有 static 方法,构造器也很简单,就是获取 FileSystemWatcherFactory ,ClassPathRestartStrategy 和 监视的文件路径,那么就看看 afterPropertiesSet写了什么叭
ClassPathFileChangeListener
===========================
这个也不复杂,就监听到文件改变后,发布事件 ClassPathChangedEvent
FileSystemWatcher
=================
接着就是这个 start 方法啦
很明显就是开启一个线程,那么咱们来看看线程中到底在 run 什么
找到这个任务类 Watcher
可以发现它的任务就是一直 scan ,pollInterval 默认是 1s ,quietPeriod 默认是 0.4s
意思是每次轮询的时间是 1s ,包含中间休息的 0.4s ,休息事件是来确认文件在这个期间没有再次被改动。
改动了的话会回调 FileChangeListener 的 onChange ,对应我们上面的这个
ClassPathFileChangeListener ,会去发布事件 ClassPathChangedEvent
ApplicationListener
===================
绕了一大圈,终于描述完了这个监视器
ClassPathFileSystemWatcher ,同时,我们也得把目光移到这个RestartConfiguration 的第二个核心 监听器
如图所示,这个方法的作用就是重启应用 restart
重启应用
====
重启的过程中呢,包括两个步骤,第一步 stop ,第二步 start
stop 部分就是毁灭这些东西了,这里也藏了很多细节,有很多并发相关的知识点
比如
一. ReentrantLock 是写在 try catch 的里面还是外面?