怎么实现一个热部署功能?

简介: 热部署

一个Java类文件到虚拟机里的对象,要经过如下过程:首先通过Java编译器,将Java文件编译成class字节码,类加载器读取class字节码,再将类转化为实例,对实例newInstance就可以生成对象。
类加载器ClassLoader功能,也就是将class字节码转换到类的实例。在Java应用中,所有的实例都是由类加载器,加载而来。
一般在系统中,类的加载都是由系统自带的类加载器完成,而且对于同一个全限定名的java类(如com.csiar.soc.HelloWorld),只能被加载一次,而且无法被卸载。
这个时候问题就来了,如果我们希望将java类卸载,并且替换更新版本的java类,该怎么做呢?
既然在类加载器中,Java类只能被加载一次,并且无法卸载。那么我们是不是可以直接把Java类加载器干掉呢?答案是可以的,我们可以自定义类加载器,并重写ClassLoaderfindClass方法。
想要实现热部署可以分以下三个步骤:

销毁原来的自定义ClassLoader
更新class类文件
创建新的ClassLoader去加载更新后的class类文件。

到此,一个热部署的功能就这样实现了。

相关文章
|
JSON Java 应用服务中间件
Spring Boot运行原理及功能实现方式
Spring Boot运行原理及功能实现方式
404 0
Spring Boot运行原理及功能实现方式
|
9月前
|
NoSQL Java 数据库连接
30个类手写Spring核心原理之动态数据源切换(8)
这里简单介绍一下AbstractRoutingDataSource的基本原理。实现数据源切换的功能就是自定义一个类扩展AbstractRoutingDataSource抽象类,其实相当于数据源的路由中介,可以实现在项目运行时根据相应key值切换到对应的DataSource上。先看看AbstractRoutingDataSource类的源码:
39 0
|
10月前
|
缓存 Java 数据安全/隐私保护
Spring 循环依赖问题解决方案以及简要源码流程剖析
Spring 循环依赖问题解决方案以及简要源码流程剖析
93 0
|
12月前
|
JSON IDE JavaScript
Spring 干掉原生 JVM?!
Spring 干掉原生 JVM?!
|
12月前
|
XML Java 程序员
【框架源码】SpringBoot核心源码解读之自动配置源码分析
【框架源码】SpringBoot核心源码解读之自动配置源码分析
【框架源码】SpringBoot核心源码解读之自动配置源码分析
|
SQL 架构师 Java
面试官:讲一讲Mybatis插件的原理及如何实现?
面试官:讲一讲Mybatis插件的原理及如何实现?
|
Java Spring 容器
springboot实战原理(10)--配置事件监听的4种方式和原理
springboot实战原理(10)--配置事件监听的4种方式和原理
463 0
springboot实战原理(10)--配置事件监听的4种方式和原理
|
Java
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
210 0
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
|
Java 容器
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(一)
|
Java Spring
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)
【SpringBoot 2】(五)自动配置简析源码 开发中小技巧(二)