插件处理方法技术

技术编号:39713707 阅读:7 留言:0更新日期:2023-12-17 23:22
本发明专利技术提供一种插件处理方法

【技术实现步骤摘要】
插件处理方法、装置、存储介质及电子设备


[0001]本专利技术涉及计算机
,尤其涉及一种插件处理方法

装置

存储介质及电子设备


技术介绍

[0002]目前,
Java Agent(
一种
Java
虚拟机
(JVM

Java Virtual Machine)
提供的机制
)
技术已广泛应用于各种场景,如各种类型的代码注入

性能监控

日志记录以及
AOP(Aspect Oriented Programming
,面向切面编程
)
等,所谓的
Java
是一种面向对象的编程语言;其中,
Java Agent
用于允许在应用程序启动时,通过代理方式来修改或增强应用程序的字节码

相应的,
Java Agent
插件
(
即代理插件,也可简称为插件
)
是一种通过
Java Agent
技术在应用程序中添加额外功能的扩展模块,这些插件通常用于应用程序的监控

性能优化

分布式追踪等方面,可以帮助开发人员实时了解应用程序的运行状态以及各个组件之间的交互情况等

但现有技术通常将代理插件中的插件依赖工具类
(

util/>类,用于提供一些实用方法和数据结构的类
)
打入到相应的原始类加载器
(classloader)
中,或打入到引导类加载器
(BootstrapClassLoader)
中,以实现对插件依赖工具类的加载,导致应用程序运行过程中,插件依赖工具类所属的类加载器中始终存在被引用的类,而类加载器必须在包括的所有类均没有被引用时才能被回收,从而导致插件依赖工具类所属的类加载器无法被卸载,以使插件依赖工具类无法被卸载,进而导致代理插件无法安全的卸载

基于此,如何加载目标代理插件,以使目标代理插件支持被动态卸载成为一个研究热点


技术实现思路

[0003]有鉴于此,本专利技术实施例提供了一种插件处理方法

装置

存储介质及电子设备,以解决现有技术难以在应用程序运行过程中,动态加载及卸载代理插件的问题;也就是说,本专利技术实施例可在应用程序运行过程中,实现目标代理插件的动态加载,且可使目标插件类加载器支持被动态卸载
(
即支持在应用程序运行过程中被卸载
)
,以使目标代理插件支持被动态卸载,从而在无需应用程序重启的情况下,实现对代理插件的加载

卸载以及重新加载
(
即重加载
)


[0004]根据本专利技术的一方面,提供了一种插件处理方法,所述方法包括:
[0005]获取目标代理插件,所述目标代理插件包括至少一个目标嵌码类和
M
个目标插件依赖工具类,
M
为非负整数;其中,一个目标嵌码类包括用于嵌入相应原始嵌码类的嵌码,一个目标插件依赖工具类用于被嵌入相应目标嵌码类中的嵌码后的原始嵌码类所引用;
[0006]基于所述至少一个目标嵌码类中的各个目标嵌码类,从至少一个原始类加载器中确定出
N
个匹配原始类加载器,一个匹配原始类加载器包括:分别与所述各个目标嵌码类相对应的原始嵌码类,
N
为非负整数;
[0007]若
M

N
均为正整数,则基于所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在键映射数据中
添加所述目标插件类加载器标识所指示的目标插件类加载器和所述各个匹配原始类加载器之间的对应关系,所述目标插件类加载器用于加载所述
M
个目标插件依赖工具类,且所述键映射数据用于在需加载任一插件依赖工具类时确定相应的插件类加载器;
[0008]分别将所述各个目标嵌码类中的嵌码,嵌入至所述各个匹配原始类加载器中的相应原始嵌码类中,并生成所述目标插件类加载器,以实现所述目标代理插件的加载,所述目标插件类加载器在所述
M
个目标插件依赖工具类中各个目标插件依赖工具类均未被引用时支持被卸载

[0009]根据本专利技术的另一方面,提供了一种插件处理装置,所述装置包括:
[0010]获取单元,用于获取目标代理插件,所述目标代理插件包括至少一个目标嵌码类和
M
个目标插件依赖工具类,
M
为非负整数;其中,一个目标嵌码类包括用于嵌入相应原始嵌码类的嵌码,一个目标插件依赖工具类用于被嵌入相应目标嵌码类中的嵌码后的原始嵌码类所引用;
[0011]处理单元,用于基于所述至少一个目标嵌码类中的各个目标嵌码类,从至少一个原始类加载器中确定出
N
个匹配原始类加载器,一个匹配原始类加载器包括:分别与所述各个目标嵌码类相对应的原始嵌码类,
N
为非负整数;
[0012]所述处理单元,还用于若
M

N
均为正整数,则基于所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在键映射数据中添加所述目标插件类加载器标识所指示的目标插件类加载器和所述各个匹配原始类加载器之间的对应关系,所述目标插件类加载器用于加载所述
M
个目标插件依赖工具类,且所述键映射数据用于在需加载任一插件依赖工具类时确定相应的插件类加载器;
[0013]所述处理单元,还用于分别将所述各个目标嵌码类中的嵌码,嵌入至所述各个匹配原始类加载器中的相应原始嵌码类中,并生成所述目标插件类加载器,以实现所述目标代理插件的加载,所述目标插件类加载器在所述
M
个目标插件依赖工具类中各个目标插件依赖工具类均未被引用时支持被卸载

[0014]根据本专利技术的另一方面,提供了一种电子设备,所述电子设备包括处理器

以及存储程序的存储器,其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述所提及的方法

[0015]根据本专利技术的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使计算机执行上述所提及的方法

[0016]本专利技术实施例可在获取到目标代理插件后,基于至少一个目标嵌码类中的各个目标嵌码类,从至少一个原始类加载器中确定出
N
个匹配原始类加载器,目标代理插件包括至少一个目标嵌本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.
一种插件处理方法,其特征在于,包括:获取目标代理插件,所述目标代理插件包括至少一个目标嵌码类和
M
个目标插件依赖工具类,
M
为非负整数;其中,一个目标嵌码类包括用于嵌入相应原始嵌码类的嵌码,一个目标插件依赖工具类用于被嵌入相应目标嵌码类中的嵌码后的原始嵌码类所引用;基于所述至少一个目标嵌码类中的各个目标嵌码类,从至少一个原始类加载器中确定出
N
个匹配原始类加载器,一个匹配原始类加载器包括:分别与所述各个目标嵌码类相对应的原始嵌码类,
N
为非负整数;若
M

N
均为正整数,则基于所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在键映射数据中添加所述目标插件类加载器标识所指示的目标插件类加载器和所述各个匹配原始类加载器之间的对应关系,所述目标插件类加载器用于加载所述
M
个目标插件依赖工具类,且所述键映射数据用于在需加载任一插件依赖工具类时确定相应的插件类加载器;分别将所述各个目标嵌码类中的嵌码,嵌入至所述各个匹配原始类加载器中的相应原始嵌码类中,并生成所述目标插件类加载器,以实现所述目标代理插件的加载,所述目标插件类加载器在所述
M
个目标插件依赖工具类中各个目标插件依赖工具类均未被引用时支持被卸载
。2.
根据权利要求1所述的方法,其特征在于,所述基于所述至少一个目标嵌码类中的各个目标嵌码类,从至少一个原始类加载器中确定出
N
个匹配原始类加载器,包括:遍历至少一个原始类加载器中的各个原始类加载器,并将当前遍历的原始类加载器作为当前原始类加载器;确定所述至少一个目标嵌码类中的各个目标嵌码类的匹配因素,并基于所述各个目标嵌码类的匹配因素,判断所述当前原始类加载器是否包括分别与所述各个目标嵌码类相对应的原始嵌码类,一个目标嵌码类的匹配因素与相应的原始嵌码类的匹配因素相同;若所述当前原始类加载器包括分别与所述各个目标嵌码类相对应的原始嵌码类,则将所述当前原始类加载器作为一个匹配原始类加载器;在遍历完所述各个原始类加载器后,得到
N
个匹配原始类加载器,以实现从所述至少一个原始类加载器中确定出所述
N
个匹配原始类加载器
。3.
根据权利要求1或2所述的方法,其特征在于,所述键映射数据用于指示
P
个类加载组中各个类加载组与
Q
个插件类加载器中相应插件类加载器之间的对应关系,一个类加载组至少包括一个原始类加载器,以使所述键映射数据用于指示原始类加载器与插件类加载器之间的对应关系,
P

Q
均为非负整数;所述基于所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在键映射数据中添加所述目标插件类加载器标识所指示的目标插件类加载器和所述各个匹配原始类加载器之间的对应关系,包括:确定所述
M
个目标插件依赖工具类中各个目标插件依赖工具类的类标识;基于所述各个目标插件依赖工具类的类标识

所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在所述键映射数据中添加所述目标插件类加载器标识所指示的目标插件类加载器和各个目标类加载组之间的对应关系;
其中,一个目标类加载组包括一个匹配原始类加载器和所述
M
个目标插件依赖工具类中的至少一个目标插件依赖工具类,以实现在所述键映射数据中添加所述目标插件类加载器和所述各个匹配原始类加载器之间的对应关系
。4.
根据权利要求3所述的方法,其特征在于,所述基于所述各个目标插件依赖工具类的类标识

所述目标代理插件对应的目标插件类加载器标识,以及所述
N
个匹配原始类加载器中各个匹配原始类加载器的类加载器标识,在所述键映射数据中添加所述目标插件类加载器标识所指示的目标插件类加载器和各个目标类加载组之间的对应关系,包括:针对所述
N
个匹配原始类加载器中的任一匹配原始类加载器,基于所述各个目标插件依赖工具类的类标识

所述目标代理插件对应的目标插件类加载器标识,以及所述任一匹配原始类加载器的类加载器标识,在所述键映射数据中添加
H
个目标类加载组标识中每个目标类加载组标识和所述目标插件类加载器标识之间的对应关系,所述
H
个目标类加载组标识中的任一目标类加载组标识用于指示所述任一匹配原始类加载器和所述
M
个目标插件依赖工具...

【专利技术属性】
技术研发人员:杜中原
申请(专利权)人:北京基调网络股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1