热部署的话就是如果class文件有改动,不用重启tomcat就能继续用。
我们知道Java缺省的加载器对相同全名的类只会加载一次,以后直接从缓存中取这个Class object。因此要实现hot swap,必须在加载的那一刻进行拦截,先判断是否已经加载,若是则重新加载一次,否则直接首次加载它。
参考:https://blog.csdn.net/zhoudaxia/article/details/35897057,
然后tomcat怎么知道class文件改动过了呢?
tomcat启动的时候会有启动一个线程每隔一段时间会去判断应用中加载的类是否发生变法(类总数的变化,类的修改),如果发生了变化就会把应用的启动的线程停止掉,清除引用,并且把加载该应用的WebappClassLoader设为null,然后创建一个新的WebappClassLoader来重新加载应用
参考:https://www.cnblogs.com/niurougan/p/4196010.html
实现的实际例子?
mysql的drivermanger:
参考:https://blog.csdn.net/javazejian/article/details/73413292