System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 插件加载方法、装置、存储介质以及电子设备制造方法及图纸_技高网

插件加载方法、装置、存储介质以及电子设备制造方法及图纸

技术编号:40556345 阅读:19 留言:0更新日期:2024-03-05 19:17
本申请涉及一种插件加载方法、装置、存储介质以及电子设备。该方法包括:在获取到多个第一插件的情况下,对所述多个第一插件进行分组,得到一个或多个插件组,其中,所述第一插件为用于增强Java应用程序的功能的插件;为每一个所述插件组分配一个目标类加载器,其中,所述目标类加载器用于加载所述插件组内的每一个插件;在任意一个插件组中的任意一个目标插件被调用时,通过所述任意一个插件组对应的所述目标类加载器加载所述目标插件。本申请解决了对Java类进行隔离的隔离效果差的技术问题。

【技术实现步骤摘要】

本申请涉及计算机领域,尤其涉及一种插件加载方法、装置、存储介质以及电子设备


技术介绍

1、java agent是一种java应用程序,它可以以插件或附加程序的形式在java虚拟机启动时加载并运行,以增强应用程序的功能。

2、现有技术中,在使用java agent时,经常面临java类隔离的问题,需要保证agent中使用的java类不会和应用中的类产生冲突,导致程序无法正常运行。现有的java类隔离的方法对java类进行隔离的隔离效果差。


技术实现思路

1、本申请提供了一种插件加载方法、装置、存储介质以及电子设备,以解决对java类进行隔离的隔离效果差的技术问题。

2、第一方面,本申请提供了一种插件加载方法,包括:在获取到多个第一插件的情况下,对上述多个第一插件进行分组,得到一个或多个插件组,其中,上述第一插件为用于增强java应用程序的功能的插件;为每一个上述插件组分配一个目标类加载器,其中,上述目标类加载器用于加载上述插件组内的每一个插件;在任意一个插件组中的任意一个目标插件被调用时,通过上述任意一个插件组对应的上述目标类加载器加载上述目标插件。

3、作为一种可选的示例,所述方法还包括:在接收到调用所述java应用程序的第一功能的调用请求且所述第一功能配置有用于增强功能的第二插件的情况下,通过拦截类加载器加载拦截类拦截所述调用请求;通过所述拦截器使用所述第二插件的字节码对所述第一功能的字节码执行增改操作,得到调整后的字节码;响应所述调用请求,返回调整后的所述字节码。

4、第二方面,本申请提供了一种插件加载装置,包括:分组模块,用于在获取到多个第一插件的情况下,对上述多个第一插件进行分组,得到一个或多个插件组,其中,上述第一插件为用于增强java应用程序的功能的插件;分配模块,用于为每一个上述插件组分配一个目标类加载器,其中,上述目标类加载器用于加载上述插件组内的每一个插件;加载模块,用于在任意一个插件组中的任意一个目标插件被调用时,通过上述任意一个插件组对应的上述目标类加载器加载上述目标插件。

5、作为一种可选的示例,上述分组模块包括:分组单元,用于将增强逻辑相同且作用于不同类的第一插件划分为一组上述插件组;或者,将上述第一插件的插件目录中,上层目录的名称相同的插件划分为一组上述插件组。

6、作为一种可选的示例,上述目标类加载器与配置文件类加载器同时继承于扫描类加载器,上述扫描类加载器继承于java的启动类加载器,上述启动类加载器用于启动上述java应用程序,上述扫描类加载器用于扫描上述第一插件,上述配置文件类加载器用于加载上述第一插件的配置信息并获取上述第一插件的分组信息,多父类加载器同时继承于上述目标类加载器与上述java应用程序的入口类加载器,拦截类加载器继承于上述多父类加载器,上述拦截类加载器用于加载拦截类。

7、作为一种可选的示例,上述分配模块包括:分配单元,用于在上述扫描类加载器每扫描到一组上述第一插件的情况下,为扫描到的一组上述第一插件分配一个上述目标类加载器。

8、作为一种可选的示例,上述分组模块包括:处理模块,用于在接收到插件植入请求的情况下,获取上述插件植入请求所请求植入的插件的软件包文件;将上述插件确定为上述第一插件;将上述软件包文件插入到上述java应用程序的程序运行目录中。

9、作为一种可选的示例,上述处理模块包括:插入单元,用于将一组软件包文件插入到上述程序运行目录的一个子目录下,且将不同组的软件包文件插入到上述程序运行目录的不同子目录下。

10、作为一种可选的示例,上述加载模块包括:加载单元,用于在任意一个插件组中的任意一个目标插件被调用时,通过上述插件组对应的上述目标类加载器将上述插件组中的每一个插件存储到缓存空间中,并从上述缓存空间中加载上述目标插件。

11、作为一种可选的示例,上述装置还包括:拦截模块,用于在任意一个插件组中的任意一个目标插件被调用时,通过所述插件组对应的所述目标类加载器确定所述任意一个目标插件所在的目录;加载所述目录下的所述任意一个目标插件。

12、第三方面,本申请提供了一种电子设备,包括:至少一个通信接口;与上述至少一个通信接口相连接的至少一个总线;与上述至少一个总线相连接的至少一个处理器;与上述至少一个总线相连接的至少一个存储器,其中,上述存储器存储有计算机程序,上述处理器被配置为执行上述计算机程序时实现上述任一项上述的插件加载方法。

13、第四方面,本申请还提供了一种计算机存储介质,存储有计算机可执行指令,上述计算机可执行指令用于执行本申请上述任一项上述的插件加载方法。

14、本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,对于用于对java应用程序的功能进行功能增强的第一插件,可以进行分组得到插件组,每一组插件组通过一个目标类加载器加载该组插件中的任意一个插件,从而实现了插件按照分组,不同组之间进行隔离,同组之内共享的效果,提高了对java类进行隔离的精度。

本文档来自技高网...

【技术保护点】

1.一种插件加载方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述在获取到多个第一插件的情况下,对所述多个第一插件进行分组,得到一个或多个插件组包括:

3.根据权利要求1所述的方法,其特征在于,所述目标类加载器与配置文件类加载器同时继承于扫描类加载器,所述扫描类加载器继承于Java的启动类加载器,所述启动类加载器用于启动所述Java应用程序,所述扫描类加载器用于扫描所述第一插件,所述配置文件类加载器用于加载所述第一插件的配置信息并获取所述第一插件的分组信息,多父类加载器同时继承于所述目标类加载器与所述Java应用程序的入口类加载器,拦截类加载器继承于所述多父类加载器,所述拦截类加载器用于加载拦截类。

4.根据权利要求3所述的方法,其特征在于,所述为每一个所述插件组分配一个目标类加载器包括:

5.根据权利要求1所述的方法,其特征在于,获取多个第一插件包括:

6.根据权利要求5所述的方法,其特征在于,所述将所述软件包文件插入到所述Java应用程序的程序运行目录中包括:

7.根据权利要求1所述的方法,其特征在于,所述在任意一个插件组中的任意一个目标插件被调用时,通过所述任意一个插件组对应的所述目标类加载器加载所述目标插件包括:

8.一种插件加载装置,其特征在于,包括:

9.一种电子设备,其特征在于,包括:至少一个通信接口;与所述至少一个通信接口相连接的至少一个总线;与所述至少一个总线相连接的至少一个处理器;与所述至少一个总线相连接的至少一个存储器,其中,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至7任意一项中所述的方法。

10.一种计算机可读的存储介质,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于执行本申请上述权利要求1至7任一项所述的方法。

...

【技术特征摘要】

1.一种插件加载方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述在获取到多个第一插件的情况下,对所述多个第一插件进行分组,得到一个或多个插件组包括:

3.根据权利要求1所述的方法,其特征在于,所述目标类加载器与配置文件类加载器同时继承于扫描类加载器,所述扫描类加载器继承于java的启动类加载器,所述启动类加载器用于启动所述java应用程序,所述扫描类加载器用于扫描所述第一插件,所述配置文件类加载器用于加载所述第一插件的配置信息并获取所述第一插件的分组信息,多父类加载器同时继承于所述目标类加载器与所述java应用程序的入口类加载器,拦截类加载器继承于所述多父类加载器,所述拦截类加载器用于加载拦截类。

4.根据权利要求3所述的方法,其特征在于,所述为每一个所述插件组分配一个目标类加载器包括:

5.根据权利要求1所述的方法,其特征在于,获取多个...

【专利技术属性】
技术研发人员:吕继朋
申请(专利权)人:网易有道信息技术杭州有限公司
类型:发明
国别省市:

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

1