平常我们在jvm的时候,如果想做点儿事情怎么办呢,其实很多的框架都为我们预留了钩子(Hook)这种东西,就是为了扩展性,能满足一些需求。先看一下jvm的钩子
public class Test {
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("jvm shutdown")));
int i= 1/0;
System.out.println("result");
}
}
最后输出
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:12)
jvm shutdown
然后我们在spring的容器关闭时,也同样可以加入一个钩子,而这个钩子就是通过registerShutdownHook()方法来实现的。
public void registerShutdownHook() {
if (this.shutdownHook == null) {
this.shutdownHook = new Thread("SpringContextShutdownHook") {
public void run() {
synchronized(AbstractApplicationContext.this.startupShutdownMon