com.jfinal.server.undertow.hotswap.HotSwapClassLoader.loadClass(String, boolean)代码如下
但是我翻遍jfinal的代码也没有找到HotSwapClassLoader.loadClass在哪里调用,HotSwapClassLoader何时成为了系统的类加载器?
在UndertowServer.doStart()配置了HotSwapWatcher
com.jfinal.server.undertow.UndertowServer.doStart()
HotSwapWatcher是一个独立的线程,检测class文件的变化,当class文件有变化时调用undertowServer.restart();重启服务
com.jfinal.server.undertow.hotswap.HotSwapWatcher.doRun()如下
在UndertowServer.restart()调用了
doStop(); config.replaceClassLoader(); doStart();
com.jfinal.server.undertow.UndertowServer.restart()如下
调用了config.replaceClassLoader();就替换了java的类加载器了吗?
config.replaceClassLoader()实际调用的是getClassLoaderKit().replaceClassLoader();
com.jfinal.server.undertow.UndertowConfig.replaceClassLoader()
但是replaceClassLoader仅仅是实例化HotSwapClassLoader,并没有使用加载class
com.jfinal.server.undertow.hotswap.ClassLoaderKit.replaceClassLoader()
然后没有找到HotSwapClassLoader.loadClass在哪里调用,HotSwapClassLoader何时成为了系统的类加载器?
之只找到了下面这一次调用,难道这一次调用之后,之后加载所有的类都会换成HotSwapClassLoader吗?
调用栈如下
com.jfinal.server.undertow.UndertowServer.start()
com.jfinal.server.undertow.UndertowServer.doStart()
com.jfinal.server.undertow.UndertowServer.init()
com.jfinal.server.undertow.UndertowServer.configJFinalFilter()
com.jfinal.server.undertow.UndertowServer.getJFinalFilter()
为什么Action也会使用HotSwapClassLoader加载呢?是在哪里配置的