ligertoolbar 动态加载按钮_一个demo展示如何应用java动态代码加载技术

一.前言

说到语言的动态性,这个是脚本语言的一大优势,没有中间环节,源码即时执行。大家一般不会把它和java联系在一起,从java本身语言来看,java确实具有脚本语言的一些特性,即可以即时编译和执行。java相关的动态加载技术也非常的成熟,在android客户端,可以用这种技术热修复,动态替换有bug的相关代码;在服务端也有广泛的应用,像java的插件技术,感兴趣的可以参考 https://github.com/pf4j/pf4j ;包括我们使用的开发工具,比如idea的热替换,帮助我们在开发过程中,修改完代码热替换文件,不用每次都重启项目。但是java的热替换有一些限制,比如不能修改方法的签名,只能修改方法体里面的内容。

二.demo

示例代码是简化后的,完整的参考https://github.com/jsdman/dynamic-code

我们结合springboot框架简单展示下动态加载代码技术的具体实现。动态加载代码的核心是类加载引擎,该类的作用是动态加载类的源文件,编译成class文件并且加载到jvm中。

public 

再定义一个接口类,我们的动态加载的类都是继承于这个接口。

public 

写个controller提供动态加载的入口和我们动态加载类的执行动作。

@RestController

再做个html页面去测试下我们的动态加载好使不:

1a3da1a14e617a9464d8c6adfd6f1c07.png

我们点击动态加载按钮,然后点击say:

1e355ac2d0a2c6588ca14f30b241008a.png

say返回字符串修改下,动态加载:

4e18b606bbde52bed5f89a86f7a9c6b8.png

我们点击动态加载按钮,然后点击say,可以看到返回值是我们动态定义的类了。

4e983f9ca551858a2df8e47e9273283a.png

也可以在代码里面加任意的其他代码,比如我想在执行前打印一些日志:

20c63abc6d34b9a62e262edad4a3d688.png

我们点击动态加载按钮,然后点击say,可以看到控制台打印出我们的代码了

d709ad24a5557f3834a59137f00d98d9.png

三.demo地址

jsdman/dynamic-code​github.com
88a22be8b29d4189ebd0df50036d3998.png

四.应用场景

大家可以一起讨论下,是否有一些场景可以应用此方式进行开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值