刚接触ClassLoader,今天在巩固概念的自我问答博弈中突然顿悟使用ClassLoader的好处,现就此记录下
对于像我这样刚接触概念的初学者,看到如下可能没啥感觉,都知道是如此
ClassLoader顾名思义,可以在程序运行的时候动态加载class文件,并在内存中生成对应的Class
但是自我博弈时改了下,变成如下
ClassLoader顾名思义,可以在服务器运行的时候动态加载class文件,并在内存中生成对应的Class
突然醍醐灌顶,服务器运行时动态加载... 嘶(吸气声),那不就意味着我可以不停机地动态加载新的业务类吗?新的业务需求一出来,想把功能快速部署,但面对一堆用户仍在开心地使用自己的服务,又不忍心重启服务器编译,这时ClassLoader不就派上用场了吗?我把写好的新业务java类编译好,通过文件方式放到服务器业务相关目录下,服务端暴露一个内部接口给客户端(比如暴露一个Controller的request匹配给前端),我一调用接口,服务端就使用ClassLoader动态加载新业务class文件到内存,在内存端得到Class对象后就可以把对应的实例切到spring环境中,岂不美哉?
对于自己来说,原先写的个人jar包里的filter模块,通过一个FilterManager管理各式各样的filter,再用一个循环统一调用,实现filter之间的解耦和,为了进一步解耦和,每个filter都会有一系列FilterHandle进行具体功能的组合(相当于一个技能有不同效果,不同效果之间可以组合)以实现进一步解耦和,至此,添加任何一个有关filter的新需求我都不需要改动任何代码,所以是非常之适合ClassLoader的动态加载新业务,至此,ClassLoader就可以大放异彩了。
事实上,这便是ClassLoader一个重要作用:热部署