Skip to content

Latest commit

 

History

History
35 lines (18 loc) · 1.11 KB

JavaAgent特性实现热加载.md

File metadata and controls

35 lines (18 loc) · 1.11 KB

使用JavaAgent实现热部署

当运行完本项目中的几个demo之后。

读者可能对Java Agent有了一些基本的概念

最起码我们知道了premain是可以运行在main函数前的。

agentmain是可以在程序运行时,修改程序内的一些类文件的。

那么热部署很明显就是使用的agentmain这个特性了

那么热部署具体应该怎么实现呢?

这里先有个大概的思路。后续如果有经历,可以简单按照这个思路实现一下

思路

当我们文件发生修改的时候,项目会重新加载我们的类。

那么这里肯定会涉及到文件变化的观察。 即 观察者设计模式跑不了

首先递归当前项目目录。并根据文件类型,如(.java ,xml,yml等)将此类文件注册观察者模式。

当文件内容发生变化时,会调用 监听器中的回调方法;

在回调中完成如下(具体实现时未必需要)

使用Java1.6的JavaCompiler编译Java文件; 自定义ClassLoader 装载 编译好的Class到堆中

使用agentmain修改原Class文件替换成新的Class文件

完成热加载