CN114237819A - 基于Java虚拟机进行处理的方法及装置、电子设备 - Google Patents
基于Java虚拟机进行处理的方法及装置、电子设备 Download PDFInfo
- Publication number
- CN114237819A CN114237819A CN202111483148.1A CN202111483148A CN114237819A CN 114237819 A CN114237819 A CN 114237819A CN 202111483148 A CN202111483148 A CN 202111483148A CN 114237819 A CN114237819 A CN 114237819A
- Authority
- CN
- China
- Prior art keywords
- class
- virtual machine
- java virtual
- bytecode
- agent
- 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 187
- 238000012545 processing Methods 0.000 title claims abstract description 51
- 230000004044 response Effects 0.000 claims abstract description 19
- 238000003860 storage Methods 0.000 claims abstract description 18
- 238000004590 computer program Methods 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 12
- 238000012986 modification Methods 0.000 claims description 11
- 230000004048 modification Effects 0.000 claims description 11
- 230000006399 behavior Effects 0.000 claims description 5
- 238000012546 transfer Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 4
- 239000003795 chemical substances by application Substances 0.000 description 39
- 238000010586 diagram Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 6
- 238000011156 evaluation Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000009420 retrofitting Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
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/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及计算机软件应用技术领域,特别是涉及一种基于Java虚拟机进行处理的方法及装置、电子设备、可读存储介质。该方法包括:当Java虚拟机加载目标程序中的类时,将所述目标程序中的类作为传入参数调用第一预设方法;所述字节码代理程序通过创建的第一框架加载配置文件,判断所述目标程序中的类的名称是否存在于所述配置文件中,若是则通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。采用本发明提供的方法能够在Java虚拟机类加载目标程序中的类之前通过第一框架对需要修改的类或方法的字节码进行修改,从而实现在不修改目标程序源代码的前提下对目标程序的功能进行修改和增强。
Description
技术领域
本申请涉及计算机软件应用技术领域,特别是涉及一种基于Java虚拟机进行处理的方法及装置、电子设备、可读存储介质。
背景技术
目前,银行后台系统之间通常以“企业服务总线”(ESB)的方式进行互相通信。企业服务总线是一种特殊的计算机服务系统,它的功能主要是对接入系统的信息进行报文格式转换,屏蔽系统间的报文格式差异,达到异构系统互联互通的目的。然而,ESB维护变得越来越困难,需要持续投入人力进行维护,此外,随着银行业务需求的日益增长,传统的企业服务总线由于其集中式的特点,它在高性能、健壮性、稳定性、灵活性等方面都越来越难以满足需求。
近年来,随着信息技术快速发展,微服务架构在互联网等领域逐渐兴起。微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信方式,通常是远程过程调用(RPC),每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中。
为了适应业务的发展和现代的软件分布架构,银行后台系统间的通信需要向微服务架构进行转变。银行后台服务向微服务架构转变的一个重要步骤是将传统的基于企业服务总线的通信方式改造为远程过程调用,具体需要由技术人员修改系统源代码,编译为可执行的程序,部署到生产运行环境中,这种修改过程通常是颠覆式的,对原系统的改造量非常大,需要对系统进行全面的回归测试。而且修改某个系统时,还需要对与之关联的多个系统进行同步修改、同步测试并在某个时间点同时上线。如果关联的系统很多,改造及上线的风险就变得非常高。
发明内容
为了解决现有技术存在的问题,本申请提供了一种基于Java虚拟机进行处理上位方法及装置、电子设备、可读存储介质;
第一方面,提供了一种基于Java虚拟机进行处理的方法,包括:
步骤S11、Java虚拟机加载目标程序至内存,当Java虚拟机加载目标程序中的类时,将所述目标程序中的类作为传入参数调用第一预设方法;所述第一预设方法中包括所述字节码代理程序传入的第一对象;
步骤S12、所述字节码代理程序通过创建的第一框架加载所述字节码代理程序中的配置文件,判断所述目标程序中的类是否存在于所述配置文件中,若是则执行步骤S13,否则向Java虚拟机返回响应;
步骤S13、字节码代理程序通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。
在一个可能地实现方式中,所述方法还包括:所述Java虚拟机加载所述字节码代理程序;
所述Java虚拟机加载所述字节码代理程序,具体包括:
步骤S21、所述Java虚拟机获取进程ID,调用第二预设方法,加载所述字节码代理程序至内存;
步骤S22、所述Java虚拟机调用所述字节码代理程序的第三预设方法;
步骤S23、所述字节码代理程序执行初始化操作;
步骤S24、所述字节码代理程序创建第一框架,通过所述第一框架在所述第三预设方法中创建第一对象,将所述第一对象作为参数传入所述Java虚拟机的第一预设方法中,以使所述Java虚拟机进行调用。
在一个可能地实现方式中,所述字节码代理程序执行初始化操作,具体包括:创建第二框架,初始化应用上下文,初始化远程调用组件。
在一个可能地实现方式中,所述字节码代理程序创建的第一框架具体为:AspectJ框架。
在一个可能地实现方式中,所述字节码代理程序通过第一框架加载注解类具体包括:所述字节码代理程序通过第一框架加载标注了第一预设标识的注解类。
在一个可能地实现方式中,所述根据注解类中定义的方法修改所述目标程序中的类,具体包括:
所述字节码代理程序通过第一框架获取标注了第二预设标识的方法,根据所述标注了第二预设标识的方法确定所述目标程序中的类或方法的具体位置;
所述字节码代理程序通过第一框架获取标注了第三预设标识的方法,根据所述标注了第三预设标识的方法对所述目标程序中的类或方法进行修改。
在一个可能地实现方式中,所述配置文件中具体包括需要修改的类的名称、修改行为的类。
第二方面,提供了一种基于Java虚拟机进行处理的装置,应用于包括所述字节码代理程序、Java虚拟机和目标程序的系统中,所述装置包括:
第一处理模块,用于加载目标程序至内存,将所述目标程序中的类作为传入参数调用第一预设方法;所述第一预设方法中包括所述字节码代理程序传入的第一对象;
第二处理模块,用于通过创建的第一框架加载所述字节码代理程序中的配置文件,判断所述目标程序中的类的名称是否存在于所述配置文件中;
第三处理模块,用于通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。
在一个可能地实现方式中,所述装置还包括:第四处理模块,用于加载所述字节码代理程序;
具体地,第四处理模块具体包括:第一加载单元、调用单元、执行单元和创建单元;
其中,所述第一加载单元,用于获取进程ID,调用第二预设方法,加载所述字节码代理程序至内存;
所述调用单元,用于调用所述字节码代理程序的第三预设方法;
所述执行单元,用于执行初始化操作;
所述创建单元,用于创建第一框架,通过所述第一框架在所述第三预设方法中创建第一对象,将所述第一对象作为参数传入所述Java虚拟机的第一预设方法中,以使所述Java虚拟机进行调用。
在一个可能地实现方式中,所述执行单元具体用于创建第二框架,初始化应用上下文,初始化远程调用组件。
在一个可能地实现方式中,所述字节码代理程序创建的第一框架具体为:AspectJ框架。
在一个可能地实现方式中,所述第三处理模块具体包括第二加载单元,用于通过第一框架加载注解类;
所述第二加载单元具体用于通过第一框架加载标注了第一预设标识的注解类。
在一个可能地实现方式中,所述第三处理模块具体包括修改单元,用于根据注解类中定义的方法修改所述目标程序中的类;
所述修改单元具体用于通过第一框架获取标注了第二预设标识的方法,根据所述标注了第二预设标识的方法确定所述目标程序中的类或方法的具体位置;通过第一框架获取标注了第三预设标识的方法,根据所述标注了第三预设标识的方法对所述目标程序中的类或方法进行修改。
第三方面,提供了一种电子设备,包括:处理器和存储器;
所述存储器,用于存储计算机程序;
所述处理器,用于通过调用所述计算机程序,执行上述的基于Java虚拟机进行处理的方法。
第四方面,提供了一种计算机可读存储介质,所述计算机存储介质用于存储计算机程序,当其在计算机上运行时,使得计算机可以执行上述的基于Java虚拟机进行处理的方法。
借由上述技术方案,本申请提供的技术方案至少具有下列优点:
本申请中Java虚拟机调用第一预设方法,通过字节码代理程序创建的第一框架加载配置文件,通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。采用本发明提供的方法能够在Java虚拟机类加载目标程序中的类之前通过第一框架对需要修改的类或方法的字节码进行修改,从而实现在不修改目标程序源代码的前提下对目标程序的功能进行修改和增强。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明实施例的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请提供的一种基于Java虚拟机进行处理的方法流程示意图;
图2为本申请提供的一种基于Java虚拟机进行处理的方法流程示意图;
图3为本申请提供的一种基于Java虚拟机进行处理的装置结构示意图;
图4为本申请提供的一种基于Java虚拟机进行处理的电子设备的结构示意图。
具体实施方式
本申请提出一种Java虚拟机处理方法、装置、电子设备及可读存储介质,下面结合附图,对本申请具体实施方式进行详细说明。
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
如图1所示,为本申请提供的一种基于Java虚拟机进行处理的方法流程示意图,该方法包括如下步骤:
步骤S101、Java虚拟机加载目标程序至内存,当Java虚拟机加载目标程序中的类时,将目标程序中的类作为传入参数调用第一预设方法;第一预设方法中包括所述字节码代理程序传入的第一对象;
步骤S102、字节码代理程序通过创建的第一框架加载字节码代理程序中的配置文件,判断目标程序中的类的名称是否存在于所述配置文件中,若是则执行步骤S103,否则向Java虚拟机返回响应;
步骤S103、字节码代理程序通过第一框架加载注解类,根据注解类中定义的方法修改目标程序中的类或类中的方法,向Java虚拟机返回响应。
在一个可能地实现方式中,该方法还包括:Java虚拟机加载字节码代理程序;
具体地,Java虚拟机加载字节码代理程序,具体包括:
步骤A1、Java虚拟机获取进程ID,调用第二预设方法,加载字节码代理程序至内存;
步骤A2、Java虚拟机调用字节码代理程序的第三预设方法;
步骤A3、字节码代理程序执行初始化操作;
步骤A4、字节码代理程序创建第一框架,通过第一框架在第三预设方法中创建第一对象,将第一对象作为参数传入Java虚拟机的第一预设方法中,以使Java虚拟机进行调用。
在一个可能地实现方式中,字节码代理程序执行初始化操作,具体包括:创建第二框架,初始化应用上下文,初始化远程调用组件。
在一个可能地实现方式中,字节码代理程序创建的第一框架具体为:AspectJ框架。
在一个可能地实现方式中,字节码代理程序通过第一框架加载注解类具体包括:字节码代理程序通过第一框架加载标注了第一预设标识的注解类。
在一个可能地实现方式中,根据注解类中定义的方法修改目标程序中的类,具体包括:字节码代理程序通过第一框架获取标注了第二预设标识的方法,根据标注了第二预设标识的方法确定目标程序中的类或方法的具体位置;字节码代理程序通过第一框架获取标注了第三预设标识的方法,根据标注了第三预设标识的方法对目标程序中的类或方法进行修改。
在一个可能地实现方式中,配置文件中具体包括需要修改的类的名称、修改行为的类。
本申请中Java虚拟机调用第一预设方法,通过字节码代理程序创建的第一框架加载配置文件,通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。采用本发明提供的方法能够在Java虚拟机类加载目标程序中的类之前通过第一框架对需要修改的类或方法的字节码进行修改,从而实现在不修改目标程序源代码的前提下对目标程序的功能进行修改和增强。本发明使用了AspectJ面向切面的编程框架,通过切点表达式指定要拦截的方法,使得字节码代理程序具备更高的灵活性。
基于上述本申请所提供的一种基于Java虚拟机进行处理的方法的技术方案,下面对该技术方案进行详尽阐释,如图2所示,为本申请提供的一种基于Java虚拟机进行处理的方法的一个可能地实现方式的具体处理流程图。
对于本申请,在一个可能地实现方式中,执行步骤201之前还包括:Java虚拟机加载字节码代理程序;
本实施例中,字节码代理程序是基于Java语言编写的应用程序,可以独立运行在Java虚拟机中,也可以通过命令行参数的形式嵌入到目标程序中运行;
本实施例中,Java虚拟机加载字节码代理程序具体是利用Java虚拟机中的类加载机制进行的;
在一个可能地实现方式中,Java虚拟机加载字节码代理程序具体包括:
步骤A1、Java虚拟机获取进程ID,调用第二预设方法,加载字节码代理程序至内存;
具体地,Java虚拟机获取进程ID具体包括:Java虚拟机调用VirtualMachine.attach方法获取进程ID;
在本实施例中,第二预设方法具体为:loadAgent挂载方法。
步骤A2、Java虚拟机调用字节码代理程序的第三预设方法;
在本实施例中,第三预设方法具体为:agentmain方法。
步骤A3、字节码代理程序执行初始化操作;
在本实施例中,步骤A3具体包括:创建第二框架,初始化应用上下文,初始化远程调用组件;
具体地,第二框架具体为:Spring框架。
步骤A4、字节码代理程序创建第一框架,通过所述第一框架在所述第三预设方法中创建第一对象,将所述第一对象作为参数传入所述Java虚拟机的第一预设方法中,以使所述Java虚拟机进行调用;
在本实施例中,创建的第一框架具体为AspectJ框架;第一预设方法为:Instrumentation.addTransformer();创建的第一对象具体为:ClassPreProcessorAgentAdapter。
步骤S201、Java虚拟机加载目标程序至内存;
步骤S202、当Java虚拟机加载目标程序中的类时,将目标程序中的类作为传入参数调用第一预设方法;
在本实施例中,第一预设方法中包括字节码代理程序传入的第一对象;
步骤S203、字节码代理程序通过创建的第一框架加载字节码代理程序中的配置文件;
在本实施例中,第一框架加载字节码代理程序中的配置文件具体为:AspectJ加载字节码代理程序中的配置文件META-INF/aop.xml;
具体地,配置文件中包括需要修改的类的名称,以及具体修改行为的aspect类,即标注第一预设标识的类;
其中,第一预设标识为@Aspect。
步骤S204、字节码代理程序判断目标程序中的类是否存在于配置文件中,若是则执行步骤S205,否则向Java虚拟机返回响应;
在本实施例中,字节码代理程序判断目标程序中的类是否存在于配置文件中具体拔卡:字节码代理程序获取目标程序中的类的名称,查询配置文件中是否存在相同的类的名称,若存在则执行步骤S205,否则向Java虚拟机返回响应;
可选地,向Java虚拟机返回响应之后还包括:Java虚拟机按照目标程序中的类继续执行。
步骤S205、字节码代理程序通过第一框架加载注解类;
在本实施例中,步骤S205具体包括:字节码代理程序通过第一框架加载标注了第一预设标识的注解类;
具体地,第一预设标识为@Aspect。
步骤S206、字节码代理程序通过第一框架获取注解类中标注了第二预设标识的方法;
在本实施例中,第二预设标识为@Pointcut;
具体地,标注了第二预设标识的方法具体定义了需要修改的类和方法的具体位置,即拦截“切面”;
步骤S207、字节码代理程序根据标注了第二预设标识的方法确定目标程序中的类或方法的具体位置;
可选地,在本申请中,标注了第二预设标识的方法具体包括目标程序中原本调用企业服务总线的代码。
步骤S208、字节码代理程序通过第一框架获取标注了第三预设标识的方法;
在本实施例中,第三预设标识为@Around;
具体地,标注了第三预设标识的方法具体定义了需要修改的类和方法的具体修改行为;
步骤S209、字节码代理程序根据标注了第三预设标识的方法对目标程序中的类或方法进行修改,向Java虚拟机返回响应。
可选地,在本申请中,标注了第二预设标识的方法具体包括将目标程序中原本调用企业服务总线的代码修改为执行远程过程调用的代码;
可选地,向Java虚拟机返回响应之后还包括:Java虚拟机按照目标程序中修改后的类继续执行。
基于上述本申请所提供的一种基于Java虚拟机进行处理的方法的技术方案,本申请对应提供了一种基于Java虚拟机进行处理的装置的结构示意图,如图3所示,本申请的一种基于Java虚拟机进行处理的装置30可以包括:
第一处理模块301,用于加载目标程序至内存,将目标程序中的类作为传入参数调用第一预设方法;其中,第一预设方法中包括字节码代理程序传入的第一对象;
第二处理模块302,用于通过创建的第一框架加载字节码代理程序中的配置文件,判断目标程序中的类的名称是否存在于配置文件中;
第三处理模块303,用于通过第一框架加载注解类,根据注解类中定义的方法修改目标程序中的类或类中的方法,向Java虚拟机返回响应。
在一个可能地实现方式中,装置还包括:第四处理模块,用于加载字节码代理程序;
具体地,第四处理模块具体包括:第一加载单元、调用单元、执行单元和创建单元;
其中,第一加载单元,用于获取进程ID,调用第二预设方法,加载字节码代理程序至内存;
调用单元,用于调用字节码代理程序的第三预设方法;
执行单元,用于执行初始化操作;
创建单元,用于创建第一框架,通过第一框架在第三预设方法中创建第一对象,将第一对象作为参数传入Java虚拟机的第一预设方法中,以使Java虚拟机进行调用。
在一个可能地实现方式中,执行单元具体用于创建第二框架,初始化应用上下文,初始化远程调用组件。
在一个可能地实现方式中,字节码代理程序创建的第一框架具体为:AspectJ框架。
在一个可能地实现方式中,第三处理模块具体包括第二加载单元,用于通过第一框架加载注解类;
第二加载单元具体用于通过第一框架加载标注了第一预设标识的注解类。
在一个可能地实现方式中,第三处理模块具体包括修改单元,用于根据注解类中定义的方法修改目标程序中的类;
修改单元具体用于通过第一框架获取标注了第二预设标识的方法,根据标注了第二预设标识的方法确定目标程序中的类或方法的具体位置;通过第一框架获取标注了第三预设标识的方法,根据标注了第三预设标识的方法对目标程序中的类或方法进行修改。
本申请中Java虚拟机调用第一预设方法,通过字节码代理程序创建的第一框架加载配置文件,通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。采用本发明提供的方法能够在Java虚拟机类加载目标程序中的类之前通过第一框架对需要修改的类或方法的字节码进行修改,从而实现在不修改目标程序源代码的前提下对目标程序的功能进行修改和增强。本发明使用了AspectJ面向切面的编程框架,通过切点表达式指定要拦截的方法,使得字节码代理程序具备更高的灵活性。
下面参考图4,其示出了适于用来实现本申请实施例的电子设备(例如图1中的终端设备)400的结构示意图。本申请实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图4示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图4所示,电子设备400可以包括处理装置(例如中央处理器、图形处理器等)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储装置408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM 403中,还存储有电子设备400操作所需的各种程序和数据。处理装置401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
通常,以下装置可以连接至I/O接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置408;以及通信装置409。通信装置409可以允许电子设备400与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的电子设备400,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置408被安装,或者从ROM 402被安装。在该计算机程序被处理装置401执行时,执行本申请实施例的方法中限定的上述功能。
需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
本申请提供的电子设备,适用于上述的一种基于Java虚拟机进行处理的方法的任一实施例,在此不再赘述。
本申请中Java虚拟机调用第一预设方法,通过字节码代理程序创建的第一框架加载配置文件,通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。采用本发明提供的方法能够在Java虚拟机类加载目标程序中的类之前通过第一框架对需要修改的类或方法的字节码进行修改,从而实现在不修改目标程序源代码的前提下对目标程序的功能进行修改和增强。本发明使用了AspectJ面向切面的编程框架,通过切点表达式指定要拦截的方法,使得字节码代理程序具备更高的灵活性。
本申请提供了一种计算机可读存储介质,该计算机可读存储介质存储计算机程序,计算机程序使计算机执行上述实施例所示的基于Java虚拟机进行处理的方法。
本申请提供的计算机可读存储介质,适用于上述的基于Java虚拟机进行处理的方法的任一实施例,在此不再赘述。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本申请公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
其中,本申请装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本申请所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本申请的几个具体实施例,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
Claims (10)
1.一种基于Java虚拟机进行处理的方法,其特征在于,包括:
步骤S11、Java虚拟机加载目标程序至内存,当Java虚拟机加载目标程序中的类时,将所述目标程序中的类作为传入参数调用第一预设方法;所述第一预设方法中包括所述字节码代理程序传入的第一对象;
步骤S12、所述字节码代理程序通过创建的第一框架加载所述字节码代理程序中的配置文件,判断所述目标程序中的类的名称是否存在于所述配置文件中,若是则执行步骤S13,否则向Java虚拟机返回响应;
步骤S13、字节码代理程序通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:所述Java虚拟机加载所述字节码代理程序;
所述Java虚拟机加载所述字节码代理程序,具体包括:
步骤S21、所述Java虚拟机获取进程ID,调用第二预设方法,加载所述字节码代理程序至内存;
步骤S22、所述Java虚拟机调用所述字节码代理程序的第三预设方法;
步骤S23、所述字节码代理程序执行初始化操作;
步骤S24、所述字节码代理程序创建第一框架,通过所述第一框架在所述第三预设方法中创建第一对象,将所述第一对象作为参数传入所述Java虚拟机的第一预设方法中,以使所述Java虚拟机进行调用。
3.如权利要求2所述的方法,其特征在于,所述字节码代理程序执行初始化操作,具体包括:创建第二框架,初始化应用上下文,初始化远程调用组件。
4.如权利要求2所述的方法,其特征在于,所述字节码代理程序创建的第一框架具体为:AspectJ框架。
5.如权利要求1所述的方法,其特征在于,所述字节码代理程序通过第一框架加载注解类具体包括:所述字节码代理程序通过第一框架加载标注了第一预设标识的注解类。
6.如权利要求1所述的方法,其特征在于,所述根据注解类中定义的方法修改所述目标程序中的类,具体包括:
所述字节码代理程序通过第一框架获取标注了第二预设标识的方法,根据所述标注了第二预设标识的方法确定所述目标程序中的类或方法的具体位置;
所述字节码代理程序通过第一框架获取标注了第三预设标识的方法,根据所述标注了第三预设标识的方法对所述目标程序中的类或方法进行修改。
7.如权利要求1所述的方法,其特征在于,所述配置文件中具体包括需要修改的类的名称、修改行为的类。
8.一种基于Java虚拟机进行处理的装置,应用于包括所述字节码代理程序、Java虚拟机和目标程序的系统中,其特征在于,所述装置包括:
第一处理模块,用于加载目标程序至内存,将所述目标程序中的类作为传入参数调用第一预设方法;所述第一预设方法中包括所述字节码代理程序传入的第一对象;
第二处理模块,用于通过创建的第一框架加载所述字节码代理程序中的配置文件,判断所述目标程序中的类的名称是否存在于所述配置文件中;
第三处理模块,用于通过第一框架加载注解类,根据注解类中定义的方法修改所述目标程序中的类或类中的方法,向Java虚拟机返回响应。
9.一种电子设备,其特征在于,包括:处理器和存储器;
所述存储器,用于存储计算机程序;
所述处理器,用于通过调用所述计算机程序,执行上述权利要求1至权利要求7中任一项所述的一种基于Java虚拟机进行处理的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机存储介质用于存储计算机程序,当其在计算机上运行时,使得计算机执行上述权利要求1至权利要求7中任一项所述的一种基于Java虚拟机进行处理的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111483148.1A CN114237819A (zh) | 2021-12-07 | 2021-12-07 | 基于Java虚拟机进行处理的方法及装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111483148.1A CN114237819A (zh) | 2021-12-07 | 2021-12-07 | 基于Java虚拟机进行处理的方法及装置、电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114237819A true CN114237819A (zh) | 2022-03-25 |
Family
ID=80753584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111483148.1A Pending CN114237819A (zh) | 2021-12-07 | 2021-12-07 | 基于Java虚拟机进行处理的方法及装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114237819A (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045746A (zh) * | 2018-10-12 | 2020-04-21 | 北京京东尚科信息技术有限公司 | 代码扩展方法和框架 |
-
2021
- 2021-12-07 CN CN202111483148.1A patent/CN114237819A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045746A (zh) * | 2018-10-12 | 2020-04-21 | 北京京东尚科信息技术有限公司 | 代码扩展方法和框架 |
Non-Patent Citations (2)
Title |
---|
NICE_0E3: "Java 安全之Java Agent", pages 3 - 5, Retrieved from the Internet <URL:https://www.cnblogs.com/nice0e3/p/14086165.html> * |
邋遢的流浪剑客: "Java Agent简介及使用Byte Buddy和AspectJ LTW监控方法执行耗时", pages 5 - 6, Retrieved from the Internet <URL:https://blog.csdn.net/qq_40378034/article/details/115281684> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112286529B (zh) | 前端页面的开发方法、装置、设备及存储介质 | |
CN105718313A (zh) | 应用操作方法和装置 | |
CN111367516B (zh) | 应用界面生成方法、装置及电子设备 | |
CN111309304B (zh) | 一种生成idl文件的方法、装置、介质和电子设备 | |
KR20150026635A (ko) | 통지 정보를 전송하기 위한 전자 장치 및 방법 | |
CN110069308A (zh) | 页面启动方法、装置、电子设备和存储介质 | |
CN110704833A (zh) | 数据权限配置方法、设备、电子设备及存储介质 | |
CN111324376B (zh) | 功能配置方法、装置、电子设备及计算机可读介质 | |
CN111400068B (zh) | 接口的控制方法、装置、可读介质和电子设备 | |
CN114489896B (zh) | 内容显示方法、装置、存储介质及电子设备 | |
CN110489158B (zh) | 对代码托管平台进行优化的方法、装置、介质和电子设备 | |
CN113296762B (zh) | 页面嵌入方法、装置、存储介质及电子设备 | |
CN109189591A (zh) | 用于调用应用组件的方法和装置 | |
EP3872630A2 (en) | Request processing method and apparatus, electronic device, and computer storage medium | |
CN114237819A (zh) | 基于Java虚拟机进行处理的方法及装置、电子设备 | |
CN108667902A (zh) | iOS设备的远程控制系统、方法、装置及设备 | |
CN109669679B (zh) | 服务检测及处理方法、装置及电子设备 | |
CN111381898B (zh) | 一种接口调用方法、装置、移动终端及存储介质 | |
CN111324386B (zh) | 分身应用程序的启动方法、装置、电子设备及存储介质 | |
CN113778566A (zh) | 原生应用调用方法、装置、电子设备和计算机可读介质 | |
CN112306516B (zh) | 用于更新代码的方法和装置 | |
CN112688863B (zh) | 网关数据处理方法、装置及电子设备 | |
CN118012470B (zh) | 电力信息管理应用更新方法、装置、电子设备与介质 | |
CN111381897B (zh) | 一种接口调用方法、装置、移动终端及存储介质 | |
CN113448550B (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 |