CN117348971A - 命名空间类调用方法、装置、设备、存储介质和程序产品 - Google Patents
命名空间类调用方法、装置、设备、存储介质和程序产品 Download PDFInfo
- Publication number
- CN117348971A CN117348971A CN202311421771.3A CN202311421771A CN117348971A CN 117348971 A CN117348971 A CN 117348971A CN 202311421771 A CN202311421771 A CN 202311421771A CN 117348971 A CN117348971 A CN 117348971A
- Authority
- CN
- China
- Prior art keywords
- class
- loader
- target
- loading
- custom
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000004590 computer program Methods 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 12
- 230000006399 behavior Effects 0.000 claims description 10
- 230000001502 supplementing effect Effects 0.000 claims description 9
- 230000004044 response Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 8
- 239000000306 component Substances 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种命名空间类调用方法、装置、计算机设备、存储介质和计算机程序产品,涉及计算机技术领域。本申请提出一种普适性较高的解决不同JAR中同命名空间冲突问题的方案,且该方案不依赖于第三方,可有效避免重复工作及多余人力的投入。该方法包括:将新建的自定义类加载器继承目标父类加载器;采用自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于线程默认加载器进行目标JAR包内类的命名空间类调用。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种命名空间类调用方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机开源技术的发展,在外联系统中,经常会调用外联方提供的JAR(JavaArchive File,Java的一种文档格式)包,此种情形下,会存在不同JAR包中存在同命名空间JAR的情况,且这些同命名空间的类实现方式不尽相同,不能很好地兼容。
传统技术中,通过配置文件POM(Project Object Model,Maven项目的核心文件之一)文件进行版本管理,多个开发者只需同步一个POM文件即可保证JAR版本统一,可以减少因JAR版本冲突导致的故障,增强应用可靠性。
然而,目前技术中的POM文件只能从JAR包的层面进行管理,不同JAR包内的冲突仍然无法解决,存在普适性较低的缺陷。
发明内容
基于此,有必要针对上述技术问题,提供一种命名空间类调用方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种命名空间类调用方法。所述方法包括:
将新建的自定义类加载器继承目标父类加载器;
采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;
将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;
基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
在其中一个实施例中,所述将新建的自定义类加载器继承目标父类加载器,包括:
响应于对待调用类的调用请求,新建自定义类加载器;确定待继承的目标父类加载器;将所述自定义类加载器继承所述目标父类加载器。
在其中一个实施例中,在采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类之前,还包括:
获取所述目标JAR包内类的定名信息;根据所述定名信息,确定所述目标JAR包内类的预设加载模式。
在其中一个实施例中,所述根据所述定名信息,确定所述目标JAR包内类的预设加载模式,包括:
基于所述目标JAR包内类的定名信息,判断所述目标JAR包内类的预设字段是否在预设集合中;其中,所述预设字段包括前缀开头预设数量的字段,所述预设集合包括多个从父类加载器加载的类的前缀开头的字段;若所述预设字段在预设集合中,则确定所述目标JAR包内类的预设加载模式为调用父类加载器加载。
在其中一个实施例中,所述采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类,包括:
将所述自定义类加载器的加载路径设置为自定义的存储路径;将所述自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使所述自定义类加载器根据所述预设加载模式,加载在自定义的存储路径上保存的所述目标JAR包内类。
在其中一个实施例中,所述将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器,包括:
将加载所述目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;将加载所述目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为所述线程默认加载器。
在其中一个实施例中,所述方法还包括:
在所述目标JAR包内类的命名空间类调用完成的情况下,生成所述目标JAR包内类的当前调用记录;根据所述目标JAR包内类的当前调用记录,对所述目标JAR包内类的历史调用记录进行补充。
第二方面,本申请还提供了一种命名空间类调用装置。所述装置包括:
继承处理模块,用于将新建的自定义类加载器继承目标父类加载器;
信息加载模块,用于采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;
内核设置模块,用于将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;
调用处理模块,用于基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
将新建的自定义类加载器继承目标父类加载器;采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
将新建的自定义类加载器继承目标父类加载器;采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
将新建的自定义类加载器继承目标父类加载器;采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
上述命名空间类调用方法、装置、计算机设备、存储介质和计算机程序产品,通过将新建的自定义类加载器继承目标父类加载器;采用自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于线程默认加载器进行目标JAR包内类的命名空间类调用。
在有益效果上:本申请在JVM(Java Virtual Machine,Java虚拟机)提供类加载器的同时,通过继承应用程序类加载器并将该类加载器设置为线程默认加载器,即可实现特定应用场景调用指定JAR包内类,解决不同JAR包中同命名空间类冲突的问题;从而提出一种普适性较高的解决不同JAR中同命名空间冲突问题的方案,该方案不仅适用冲突命名空间由第三方单位提供JAR包内引用相同JAR的不同版本的场景,其他场景亦可适用;此外,该方案不依赖于第三方,可有效避免重复工作及多余人力的投入,降低管理成本。
附图说明
图1为一个实施例中命名空间类调用方法的应用环境图;
图2为一个实施例中命名空间类调用方法的流程示意图;
图3为一个实施例中继承目标父类加载器步骤的流程示意图;
图4为一个实施例中确定预设加载模式步骤的流程示意图;
图5为一个实施例中加载目标JAR包内类步骤的流程示意图;
图6为一个实施例中设置线程默认加载器步骤的流程示意图;
图7为一具体实施例中命名空间类调用方法的流程示意图;
图8为一个实施例中命名空间类调用装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的命名空间类调用方法,可以应用于如图1所示的应用环境中。其中,终端101通过网络与服务器102进行通信。数据存储系统可以存储服务器102需要处理的数据。数据存储系统可以集成在服务器102上,也可以放在云上或其他网络服务器上。
具体地,本申请实施例提供的命名空间类调用方法,可以由服务器102执行。
示例性的,服务器102将新建的自定义类加载器继承目标父类加载器;采用自定义类加载器在预设的存储路径上加载目标JAR包内类;服务器102将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于线程默认加载器进行目标JAR包内类的命名空间类调用。
在如图1所示的应用环境中,终端101可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑。服务器102可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种命名空间类调用方法,以该方法应用于图1中的服务器102为例进行说明,包括以下步骤:
步骤S201,将新建的自定义类加载器继承目标父类加载器。
其中,自定义类加载器是指通过编写自己的Java类加载器来实现对类的加载和定义。
其中,在Java中,每个类加载器都有一个父类加载器,父类加载器负责加载该类加载器无法加载的类,每个类加载器除了根加载器以外,都有一个明确的父加载器。
具体地,服务器102响应于命名空间类调用指令,新建自定义类加载器,将自定义类加载器继承目标父类加载器。
步骤S202,采用自定义类加载器在预设的存储路径上加载目标JAR包内类。
其中,JAR是一种常见的Java文件格式,用于打包和分发Java应用程序和类库;JAR文件实质上是一个压缩文件,可以包含多个Java类、资源文件和相关的元数据信息。
其中,类是面向对象编程中的一个重要概念,用于描述一类具有相似属性和行为的对象。
具体地,服务器102将自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类。
步骤S203,将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器。
其中,内核是操作系统的核心组件,它是操作系统与硬件之间的桥梁,负责管理计算机的资源并提供各种服务和功能。
具体地,服务器102将加载目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性,将加载目标JAR包内类后的自定义类加载器加载至内核中,并设置为内核中的线程默认加载器。
步骤S204,基于线程默认加载器进行目标JAR包内类的命名空间类调用。
其中,命名空间是class文件对应Java类对应的包内唯一路径,class文件是由Java语言编写的程序经编译后生成的可运行文件。
具体地,服务器102基于线程默认加载器进行目标JAR包内类的命名空间类调用。
上述命名空间类调用方法中,通过将新建的自定义类加载器继承目标父类加载器;采用自定义类加载器在预设的存储路径上加载目标JAR包内类;将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;基于线程默认加载器进行目标JAR包内类的命名空间类调用。
在有益效果上:本申请在JVM(Java Virtual Machine,Java虚拟机)提供类加载器的同时,通过继承应用程序类加载器并将该类加载器设置为线程默认加载器,即可实现特定应用场景调用指定JAR包内类,解决不同JAR包中同命名空间类冲突的问题;从而提出一种普适性较高的解决不同JAR中同命名空间冲突问题的方案,该方案不仅适用冲突命名空间由第三方单位提供JAR包内引用相同JAR的不同版本的场景,其他场景亦可适用;此外,该方案不依赖于第三方,可有效避免重复工作及多余人力的投入,降低管理成本。
在其中一个实施例中,如图3所示,上述步骤S201中,将新建的自定义类加载器继承目标父类加载器,具体包括如下步骤:
步骤S301,响应于对待调用类的调用请求,新建自定义类加载器。
步骤S302,确定待继承的目标父类加载器。
步骤S303,将自定义类加载器继承目标父类加载器。
其中,继承是一种面向对象编程的基本特性,它允许一个类从另一个类中派生出新的类,称为子类或派生类,这个被派生的类就可以继承父类或基类的属性和方法,同时还可以添加自己的属性和方法。
具体地,服务器102响应于对待调用类的调用请求,新建自定义类加载器;确定待继承的目标父类加载器;将自定义类加载器继承目标父类加载器。
本实施例中,通过将新建的自定义类加载器继承目标父类加载器,从而为实现特定应用场景调用指定JAR包内类提供了载体支撑。
在其中一个实施例中,在采用自定义类加载器在预设的存储路径上加载目标JAR包内类之前,还包括如下步骤:
获取目标JAR包内类的定名信息;根据定名信息,确定目标JAR包内类的预设加载模式。
其中,JAR文件中的定名信息是一个包含特定格式的清单文件,用于描述和定义JAR文件本身的属性和元数据。
具体地,服务器102获取目标JAR包内类的定名信息;根据定名信息,确定目标JAR包内类的预设加载模式。
本实施例中,通过获取目标JAR包内类的定名信息,根据定名信息,确定目标JAR包内类的预设加载模式;从而依照定名信息这一参考指标,准确地识别出目标JAR包内类的预设加载模式。
在其中一个实施例中,如图4所示,根据所述定名信息,确定所述目标JAR包内类的预设加载模式,具体包括如下步骤:
步骤S401,基于目标JAR包内类的定名信息,判断目标JAR包内类的预设字段是否在预设集合中。
步骤S402,若预设字段在预设集合中,则确定目标JAR包内类的预设加载模式为调用父类加载器加载。
其中,预设字段是指在软件系统或程序中预先定义好的固定数据字段,这些字段通常由系统或程序开发者事先定义,用于在系统或程序中存储、处理和显示特定类型的数据。
其中,预设集合指的是预先定义好的一组元素的集合,这些元素可以是具体的值、对象或符号,它们被作为集合的成员,根据特定的规则进行定义和分类。
具体地,服务器102基于目标JAR包内类的定名信息,判断目标JAR包内类的预设字段是否在预设集合中,得到判断结果;若判断结果为预设字段在预设集合中,则确定目标JAR包内类的预设加载模式为调用父类加载器加载。
本实施例中,通过判断目标JAR包内类的预设字段是否在预设集合中,若预设字段在预设集合中,则确定目标JAR包内类的预设加载模式为调用父类加载器加载;从而通过比对预设字段和预设集合是否存在包含关系,准确地确定出目标JAR包内类的预设加载模式。
在其中一个实施例中,如图5所示,采用自定义类加载器在预设的存储路径上加载目标JAR包内类,具体包括如下步骤:
步骤S501,将自定义类加载器的加载路径设置为自定义的存储路径。
步骤S502,将自定义类加载器进行实例化。
步骤S503,设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类。
其中,实例化指的是在运行时创建一个类的实例;在面向对象编程语言中,一个类定义了一组属性和方法,而实例则是类中特定对象的具体实现。
具体地,服务器102将自定义类加载器的加载路径设置为自定义的存储路径;将自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类。
本实施例中,通过将自定义类加载器进行实例化,设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类;从而有效得到加载目标JAR包内类后的自定义类加载器,为实现特定应用场景调用指定JAR包内类提供了保障。
在其中一个实施例中,如图6所示,将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器,具体包括如下步骤:
步骤S601,将加载目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性。
步骤S602,将加载目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为线程默认加载器。
其中,成员属性是面向对象编程中类的一个重要组成部分,用于描述对象的特征和状态,每个对象都可以具有一组成员属性,这些属性定义了对象的属性值,并且每个对象的属性可以有不同的取值。
具体地,服务器102将加载目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;将加载目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为线程默认加载器。
本实施例中,通过将加载所述目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,从而高效准确地实现了线程默认加载器的替换。
在其中一个实施例中,还包括如下步骤:
在目标JAR包内类的命名空间类调用完成的情况下,生成目标JAR包内类的当前调用记录;根据目标JAR包内类的当前调用记录,对目标JAR包内类的历史调用记录进行补充。
具体地,服务器102在目标JAR包内类的命名空间类调用完成的情况下,生成目标JAR包内类的当前调用记录;根据目标JAR包内类的当前调用记录,对目标JAR包内类的历史调用记录进行更新和补充。
本实施例中,通过生成目标JAR包内类的当前调用记录,根据目标JAR包内类的当前调用记录,对目标JAR包内类的历史调用记录进行补充;从而实现了对JAR包内类调用记录的高效存储功能,便于相关工作人员对调用记录进行后续分析和利用。
在一个实施例中,如图7所示,提供了一具体实施例中命名空间类调用方法,具体包括以下步骤:
步骤S701,响应于对待调用类的调用请求,新建自定义类加载器;确定待继承的目标父类加载器;将自定义类加载器继承目标父类加载器。
步骤S702,获取目标JAR包内类的定名信息;基于目标JAR包内类的定名信息,判断目标JAR包内类的预设字段是否在预设集合中;若预设字段在预设集合中,则确定目标JAR包内类的预设加载模式为调用父类加载器加载。
步骤S703,将自定义类加载器的加载路径设置为自定义的存储路径;将自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类。
步骤S704,将加载目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;将加载目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为线程默认加载器。
步骤S705,基于线程默认加载器进行目标JAR包内类的命名空间类调用。
步骤S706,在目标JAR包内类的命名空间类调用完成时,生成目标JAR包内类的当前调用记录;根据目标JAR包内类的当前调用记录,对目标JAR包内类的历史调用记录进行补充。
上述实施例带来的有益效果如下:
1)提出一种普适性高的解决不同外联方提供JAR由引入开源JAR导致的同命名空间冲突问题的方案,该方案不仅适用冲突命名空间由第三方单位提供JAR包内引用相同JAR的不同版本的场景,其他场景亦可使用。
2)该种实现方案具备可扩展性,可基于方案中的自定义加载器实现核心代码实现更多应用中的特殊需求。
3)该方案不依赖于第三方,可有效避免重复工作及多余人力的投入,降低管理成本。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的命名空间类调用方法的命名空间类调用装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个命名空间类调用装置实施例中的具体限定可以参见上文中对于命名空间类调用方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种命名空间类调用装置,包括:
继承处理模块801,用于将新建的自定义类加载器继承目标父类加载器;
信息加载模块802,用于采用自定义类加载器在预设的存储路径上加载目标JAR包内类;
内核设置模块803,用于将加载目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;
调用处理模块804,用于基于线程默认加载器进行目标JAR包内类的命名空间类调用。
在一个实施例中,继承处理模块801,还用于响应于对待调用类的调用请求,新建自定义类加载器;确定待继承的目标父类加载器;将自定义类加载器继承目标父类加载器。
在一个实施例中,命名空间类调用装置还包括模式确定模块,用于获取目标JAR包内类的定名信息;根据定名信息,确定目标JAR包内类的预设加载模式。
在一个实施例中,模式确定模块,还用于基于目标JAR包内类的定名信息,判断目标JAR包内类的预设字段是否在预设集合中;其中,预设字段包括前缀开头预设数量的字段,预设集合包括多个从父类加载器加载的类的前缀开头的字段;若预设字段在预设集合中,则确定目标JAR包内类的预设加载模式为调用父类加载器加载。
在一个实施例中,信息加载模块802,还用于将自定义类加载器的加载路径设置为自定义的存储路径;将自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使自定义类加载器根据预设加载模式,加载在自定义的存储路径上保存的目标JAR包内类。
在一个实施例中,内核设置模块803,还用于将加载目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;将加载目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为线程默认加载器。
在一个实施例中,命名空间类调用装置还包括记录补充模块,用于在目标JAR包内类的命名空间类调用完成的情况下,生成目标JAR包内类的当前调用记录;根据目标JAR包内类的当前调用记录,对目标JAR包内类的历史调用记录进行补充。
上述命名空间类调用装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储目标JAR包内类的历史调用记录数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种命名空间类调用方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (17)
1.一种命名空间类调用方法,其特征在于,所述方法包括:
将新建的自定义类加载器继承目标父类加载器;
采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;
将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;
基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
2.根据权利要求1所述的方法,其特征在于,所述将新建的自定义类加载器继承目标父类加载器,包括:
响应于对待调用类的调用请求,新建自定义类加载器;
确定待继承的目标父类加载器;
将所述自定义类加载器继承所述目标父类加载器。
3.根据权利要求1所述的方法,其特征在于,在采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类之前,还包括:
获取所述目标JAR包内类的定名信息;
根据所述定名信息,确定所述目标JAR包内类的预设加载模式。
4.根据权利要求3所述的方法,其特征在于,所述根据所述定名信息,确定所述目标JAR包内类的预设加载模式,包括:
基于所述目标JAR包内类的定名信息,判断所述目标JAR包内类的预设字段是否在预设集合中;其中,所述预设字段包括前缀开头预设数量的字段,所述预设集合包括多个从父类加载器加载的类的前缀开头的字段;
若所述预设字段在预设集合中,则确定所述目标JAR包内类的预设加载模式为调用父类加载器加载。
5.根据权利要求3所述的方法,其特征在于,所述采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类,包括:
将所述自定义类加载器的加载路径设置为自定义的存储路径;
将所述自定义类加载器进行实例化;
设置实例化后的自定义类加载器的加载行为,以使所述自定义类加载器根据所述预设加载模式,加载在自定义的存储路径上保存的所述目标JAR包内类。
6.根据权利要求1所述的方法,其特征在于,所述将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器,包括:
将加载所述目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;
将加载所述目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为所述线程默认加载器。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:
在所述目标JAR包内类的命名空间类调用完成的情况下,生成所述目标JAR包内类的当前调用记录;
根据所述目标JAR包内类的当前调用记录,对所述目标JAR包内类的历史调用记录进行补充。
8.一种命名空间类调用装置,其特征在于,所述装置包括:
继承处理模块,用于将新建的自定义类加载器继承目标父类加载器;
信息加载模块,用于采用所述自定义类加载器在预设的存储路径上加载目标JAR包内类;
内核设置模块,用于将加载所述目标JAR包内类后的自定义类加载器设置为内核中的线程默认加载器;
调用处理模块,用于基于所述线程默认加载器进行所述目标JAR包内类的命名空间类调用。
9.根据权利要求8所述的装置,其特征在于,所述继承处理模块,还用于响应于对待调用类的调用请求,新建自定义类加载器;确定待继承的目标父类加载器;将所述自定义类加载器继承所述目标父类加载器。
10.根据权利要求8所述的装置,其特征在于,所述装置还包括模式确定模块,用于获取所述目标JAR包内类的定名信息;根据所述定名信息,确定所述目标JAR包内类的预设加载模式。
11.根据权利要求10所述的装置,其特征在于,所述模式确定模块,还用于基于所述目标JAR包内类的定名信息,判断所述目标JAR包内类的预设字段是否在预设集合中;其中,所述预设字段包括前缀开头预设数量的字段,所述预设集合包括多个从父类加载器加载的类的前缀开头的字段;若所述预设字段在预设集合中,则确定所述目标JAR包内类的预设加载模式为调用父类加载器加载。
12.根据权利要求10所述的装置,其特征在于,所述信息加载模块,还用于将所述自定义类加载器的加载路径设置为自定义的存储路径;将所述自定义类加载器进行实例化;设置实例化后的自定义类加载器的加载行为,以使所述自定义类加载器根据所述预设加载模式,加载在自定义的存储路径上保存的所述目标JAR包内类。
13.根据权利要求8所述的装置,其特征在于,所述内核设置模块,还用于将加载所述目标JAR包内类后的自定义类加载器设置为目标应用程序加载类的成员属性;将加载所述目标JAR包内类后的自定义类加载器加载至内核中,替换内核中指定的已加载的类加载器,作为所述线程默认加载器。
14.根据权利要求8至13任一项所述的装置,其特征在于,所述装置还包括记录补充模块,用于在所述目标JAR包内类的命名空间类调用完成的情况下,生成所述目标JAR包内类的当前调用记录;根据所述目标JAR包内类的当前调用记录,对所述目标JAR包内类的历史调用记录进行补充。
15.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
17.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311421771.3A CN117348971A (zh) | 2023-10-30 | 2023-10-30 | 命名空间类调用方法、装置、设备、存储介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311421771.3A CN117348971A (zh) | 2023-10-30 | 2023-10-30 | 命名空间类调用方法、装置、设备、存储介质和程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117348971A true CN117348971A (zh) | 2024-01-05 |
Family
ID=89362927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311421771.3A Pending CN117348971A (zh) | 2023-10-30 | 2023-10-30 | 命名空间类调用方法、装置、设备、存储介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117348971A (zh) |
-
2023
- 2023-10-30 CN CN202311421771.3A patent/CN117348971A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10089119B2 (en) | API namespace virtualization | |
CN110032599B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
CN109299587A (zh) | 基于go语言的算法保护方法、装置、设备及存储介质 | |
EP1582985A2 (en) | Test case inheritance controlled via attributes | |
CN110007920B (zh) | 一种获取代码依赖关系的方法、装置及电子设备 | |
US20110191304A1 (en) | System and method for export and import of metadata located in metadata registries | |
US20150012669A1 (en) | Platform runtime abstraction | |
EP3812917A1 (en) | Data structure reading method and apparatus, data structure updating method and apparatus, and electronic device | |
US20120159515A1 (en) | Sharing object representations | |
US10719488B2 (en) | Configurable provider for layered repository | |
CN115328569A (zh) | 处理数据冲突的方法、系统、电子设备及计算机可读存储介质 | |
CN115328458B (zh) | 一种业务应用开发方法及装置 | |
CN115269040B (zh) | 一种租户业务应用的拓展方法、装置及系统 | |
CN110597827A (zh) | 一种接口控制文件数据的存储方法及系统 | |
CN117348971A (zh) | 命名空间类调用方法、装置、设备、存储介质和程序产品 | |
WO2022135592A1 (zh) | 模型训练程序镜像的生成方法、装置、设备及存储介质 | |
CN111857662B (zh) | 基于map和接口来描述对象特定构成的程序设计方法 | |
CN111221560B (zh) | 一种资源管理方法、装置和电子设备 | |
CN113867776A (zh) | 中台应用的发布方法、装置、电子设备和存储介质 | |
CN116204554B (zh) | 数据处理方法、系统、电子设备和存储介质 | |
US11720333B2 (en) | Extending application lifecycle management to user-created application platform components | |
CN114528045B (zh) | 插件操作方法、装置、计算机设备和存储介质 | |
CN114036171B (zh) | 应用数据管理方法、装置、计算机设备和存储介质 | |
CN117369861A (zh) | 应用程序的线程管理策略配置方法及相关装置 | |
CN116880927A (zh) | 规则管理方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |