当运行完本项目中的几个demo之后。
读者可能对Java Agent有了一些基本的概念
最起码我们知道了premain是可以运行在main函数前的。
而agentmain是可以在程序运行时,修改程序内的一些类文件的。
那么热部署很明显就是使用的agentmain这个特性了
这里先有个大概的思路。后续如果有经历,可以简单按照这个思路实现一下
当我们文件发生修改的时候,项目会重新加载我们的类。
那么这里肯定会涉及到文件变化的观察。 即 观察者设计模式跑不了
首先递归当前项目目录。并根据文件类型,如(.java ,xml,yml等)将此类文件注册观察者模式。
当文件内容发生变化时,会调用 监听器中的回调方法;
在回调中完成如下(具体实现时未必需要)
使用Java1.6的JavaCompiler编译Java文件; 自定义ClassLoader 装载 编译好的Class到堆中
使用agentmain修改原Class文件替换成新的Class文件
完成热加载