CN111736916A - 基于Java语言的动态扩展方法、装置、电子设备及存储介质 - Google Patents
基于Java语言的动态扩展方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN111736916A CN111736916A CN202010513093.3A CN202010513093A CN111736916A CN 111736916 A CN111736916 A CN 111736916A CN 202010513093 A CN202010513093 A CN 202010513093A CN 111736916 A CN111736916 A CN 111736916A
- Authority
- CN
- China
- Prior art keywords
- source code
- target
- target source
- code
- class
- 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 60
- 230000007246 mechanism Effects 0.000 claims abstract description 15
- 238000011161 development Methods 0.000 abstract description 26
- 238000012545 processing Methods 0.000 description 11
- 238000012360 testing method Methods 0.000 description 10
- 238000012795 verification Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000005236 sound signal Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect 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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开涉及一种基于Java语言的动态扩展方法、装置、电子设备及存储介质。该方法包括:通过API接口接收目标源代码,API接口是为接收目标源代码而预先创建的;对目标源代码进行编译,得到对应的字节码;通过类加载器对字节码进行加载,得到目标类对象;执行目标类对象对应的目标源代码。其中,预先创建API接口可以为获取目标源代码暴露一个接口,以获取动态扩展的目标源代码,实现开发项目的动态扩展;在获取到目标源代码后,将目标源代码编译成对应的字节码并加载成目标类对象,通过Java的反射机制执行目标类对象对应的目标源代码中的程序,可以对目标源代码中的程序进行开发、测试、验证和应用,实现开发项目的动态扩展。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种基于Java语言的动态扩展方法、装置、电子设备及存储介质。
背景技术
随着计算机技术的不断发展,Java语言以其独特的优势得到了广泛的应用,Java语言被广泛应用于各种开发工作中。在开发过程中,经常需要对一些程序进行测试和验证,然而Java是静态语言,每一测试或验证执行前,需要重新对编好的Java程序进行编译打包,再进行测试和验证。然而编译打包上传重启等操作,会增加大量的人工成本和时间成本和设备成本,不利于Java的动态扩展。对此,传统动态扩展方法中,存在通过Java的反射执行指定的类的方法,以解决需要重新编译打包的问题。
然而,通过Java的反射执行指定的类的方法,只能执行已有的方法,不能编写并执行新代码,无法实现开发项目的动态扩展。
发明内容
本公开提供一种基于Java语言的动态扩展方法、装置、电子设备及存储介质,以至少解决相关技术中不能编写并执行新代码,无法实现开发项目的动态扩展的问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提供一种基于Java语言的动态扩展方法,包括:
通过API接口接收目标源代码,所述API接口是为接收所述目标源代码而预先创建的;
对所述目标源代码进行编译,得到对应的字节码;
通过类加载器对所述字节码进行加载,得到目标类对象;
执行所述目标类对象对应的目标源代码。
在一示例性实施例中,所述执行所述目标类对象对应的目标源代码,包括:
通过Java的反射机制,执行所述目标类对象对应的目标源代码。
在一示例性实施例中,所述目标源代码为由用户端输入的待扩展代码,所述待扩展代码为根据新的逻辑需求生成的逻辑代码。
在一示例性实施例中,所述对所述目标源代码进行编译,得到对应的字节码,包括:
通过Java的内存编译器,对所述目标源代码进行动态编译,得到所述字节码。
在一示例性实施例中,所述字节码与所述目标源代码中的类名对应,所述类名为所述目标源代码对应的标识;
所述对所述目标源代码进行编译,得到对应的字节码之后,包括:
将所述字节码与对应的类名存储至所述类加载器。
在一示例性实施例中,所述通过类加载器对所述字节码进行加载,得到目标类对象,包括:
获取目标类名;
从所述类加载器中查找与所述目标类名对应的字节码;
通过所述类加载器创建与所述字节码对应的目标类对象。
在一示例性实施例中,所述执行所述目标类对象对应的目标源代码之后,包括:
将执行所述目标类对象对应的目标源代码的结果,通过所述API接口返回至用户端。
根据本公开实施例的第二方面,提供一种基于Java语言的动态扩展装置,包括:
目标源代码接收单元,被配置为执行通过API接口接收目标源代码,所述API接口是为接收所述目标源代码而预先创建的;
代码编译单元,被配置为执行对所述目标源代码进行编译,得到对应的字节码;
代码加载单元,被配置为执行通过类加载器对所述字节码进行加载,得到目标类对象;
代码执行单元,被配置为执行所述目标类对象对应的目标源代码。
在一示例性实施例中,所述代码执行单元还被配置为执行:
通过Java的反射机制,执行所述目标类对象对应的目标源代码。
在一示例性实施例中,所述目标源代码接收单元接收到的所述目标源代码为由用户端输入的待扩展代码,所述待扩展代码为根据新的逻辑需求生成的逻辑代码。
在一示例性实施例中,所述代码编译单元还被配置为执行:
通过Java的内存编译器,对所述目标源代码进行动态编译,得到所述字节码。
在一示例性实施例中,所述字节码与所述目标源代码中的类名对应,所述类名为所述目标源代码对应的标识;
所述代码编译单元还被配置为执行:
将所述字节码与对应的类名存储至所述类加载器。
在一示例性实施例中,所述代码加载单元还被配置为执行:
获取目标类名;
从所述类加载器中查找与所述目标类名对应的字节码;
通过所述类加载器创建与所述字节码对应的目标类对象。
在一示例性实施例中,所述装置还包括执行结果返回单元,被配置为执行:
将执行所述目标类对象对应的目标源代码的结果,通过所述API接口返回至用户端。
根据本公开实施例的第三方面,提供一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现上述第一方面任一项实施例中所述的基于Java语言的动态扩展方法。
根据本公开实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述第一方面任一项实施例中所述的基于Java语言的动态扩展方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,所述程序产品包括计算机程序,所述计算机程序存储在可读存储介质中,设备的至少一个处理器从所述可读存储介质读取并执行所述计算机程序,使得设备执行上述第一方面任一项实施例中所述的基于Java语言的动态扩展方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
通过为接收目标源代码而预先创建API接口接收目标源代码,并对目标源代码进行编译,得到目标源代码对应的字节码,通过类加载器对字节码进行加载,得到目标源代码对应的目标类对象,以执行目标类对象对应的目标源代码中的程序。其中,预先创建API接口可以为获取目标源代码暴露一个接口,以获取动态扩展的目标源代码,实现开发项目的动态扩展;在获取到目标源代码后,将目标源代码编译成对应的字节码并加载成目标类对象(新的Java类),通过Java的反射机制执行目标类对象对应的目标源代码中的程序,可以对目标源代码(新代码)中的程序进行开发、测试、验证和应用,实现开发项目的动态扩展。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种基于Java语言的动态扩展方法的流程图。
图2是根据一示例性实施例示出的步骤S200之后的一种可实施方式的流程图。
图3是根据一具体的示例性实施例示出的一种基于Java语言的动态扩展方法的流程图。
图4是根据一示例性实施例示出的一种基于Java语言的动态扩展装置的框图。
图5是根据一示例性实施例示出的一种基于Java语言的动态扩展的电子设备的内部结构图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种基于Java语言的动态扩展方法的流程图,如图1所示,具体包括以下步骤:
在步骤S100中,通过API接口接收目标源代码,API接口是为接收目标源代码而预先创建的。
在步骤S200中,对目标源代码进行编译,得到对应的字节码。
在步骤S300中,通过类加载器对字节码进行加载,得到目标类对象。
在步骤S3400中,执行目标类对象对应的目标源代码。
其中,源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。本公开中的目标源代码是指开发人员在独立于相关开发项目的原有代码的基础上,重新编写的用于实现一定方法和逻辑的程序代码。编译(compilation,compile)是利用编译程序从源语言编写的源程序产生目标程序的过程。或用编译程序产生目标程序的动作。编译是把高级语言变成计算机可以识别的二进制语言,以使计算机可以识别和执行相应的目标源代码。字节码(Byte-code)是一种包含执行程序,由一序列op代码/数据对组成的二进制文件,是一种中间码。类加载器(Java类加载器,Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。Java中的对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。Java中的类对象是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法)。
具体地,在原有的开发项目中暴露一个API接口,通过该API接口接收目标源代码,通过对该目标源代码的执行可以实现开发项目的动态扩展。为了执行目标源代码,需对目标源代码进行编译,得到对应的字节码,并通过类加载器创建相应的目标类对象。因此,在通过这一预先设置的API接口获取开发人员编写的用于实现一定方法和逻辑的目标源代码后,通过编译器对该目标源代码进行编译,得到相应的二进制字节码,并根据该二进制字节码与目标源代码中类名的对应关系,得到与目标源代码对应的目标类对象(新的Java类),执行新的目标类对象对应的程序或方法,对目标源代码(新代码)中的程序进行开发、测试、验证,并在该目标源代码对应的目标类对象通过测试和验证后,将该新的目标类对象对应的目标源代码作为开发项目的一部分,实现对开发项目的动态扩展。
上述基于Java语言的动态扩展方法,通过为接收目标源代码而预先创建API接口接收目标源代码,并对目标源代码进行编译,得到目标源代码对应的字节码,通过类加载器对字节码进行加载,得到目标源代码对应的目标类对象,以执行目标类对象对应的目标源代码中的程序。其中,预先创建API接口可以为获取目标源代码暴露一个接口,以获取动态扩展的目标源代码,实现开发项目的动态扩展;在获取到目标源代码后,将目标源代码编译成对应的字节码并加载成目标类对象(新的Java类),执行目标类对象对应的目标源代码中的程序,可以对目标源代码(新代码)中的程序进行开发、测试、验证和应用,实现开发项目的动态扩展。
在一示例性实施例中,步骤S3400,执行目标类对象对应的目标源代码,包括:
通过Java的反射机制,执行目标类对象对应的目标源代码。
其中,Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。
具体地,得到的与目标源代码对应的目标类对象为可通过Java的反射机制执行的类对象。在得到目标类对象后,通过Java的反射机制执行新的目标类对象对应的程序或方法,对目标源代码(新代码)中的程序进行开发、测试、验证,并在该目标源代码对应的目标类对象通过测试和验证后,将该新的目标类对象对应的目标源代码作为开发项目的一部分,实现对开发项目的动态扩展。
可选地,目标源代码为由用户端输入的待扩展代码,待扩展代码为根据新的逻辑需求生成的逻辑代码。
具体地,在运用Java语言进行编程并完成一个开发项目后,或者完成一个开发项目中的部分内容后,如果需要在开发项目中加入新的功能或需求时,需要对原有的源代码和新的目标源代码重新编译、打包上传。而本公开通过预先设置的API接口可以获取新的目标源代码,该目标源代码是指通过API接口,由用户端输入的待扩展代码,根据新的逻辑需求生成的逻辑代码。
可选地,通过Java的内存编译器,对目标源代码进行动态编译,得到字节码。
具体地,通过Java的内存编译器,对目标源代码进行动态编译,得到字节码,并自定义一个类加载器,用于存储字节码与目标源代码中的类名的映射关系,为后续指定的目标类名的执行提供获取对应字节码提供基础。
上述示例性实施例中,通过Java的反射机制,执行目标类对象对应的目标源代码,可以对目标源代码中的程序进行开发、测试、验证和应用,实现开发项目的动态扩展。
在一示例性实施例中,步骤S400,通过Java的反射机制,执行目标类对象对应的目标源代码之后,包括:
将字节码与对应的类名存储至类加载器。
其中,字节码与目标源代码中的类名对应,类名为目标源代码对应的标识。
具体地,自定义一个类加载器,用于存储字节码与目标源代码中的类名的映射关系,为后续指定的目标类名的执行提供获取对应字节码提供基础。
可选地,图2是根据一具体示例性实施例示出的步骤S200之后的一种可实施方式的流程图,如图2所示,通过类加载器对字节码进行加载,得到目标类对象,具体包括以下步骤:
在步骤S210中,获取目标类名。
在步骤S220中,从类加载器中查找与目标类名对应的字节码。
在步骤S230中,通过类加载器创建与字节码对应的目标类对象。
其中,目标类名为指定的需要执行的类对象的类名。
具体地,在需要加载对应的类时,从类加载器中对应的映射中查找,目标类名对应的字节码,并通过类加载器创建目标类对象。该目标类对象为与目标源代码对应的需要加载的类,该目标类对象后可以用于反射调用,以实现对目标源代码的执行。
上述示例性实施例中,将字节码与对应的类名存储至类加载器,并在获取目标类名后,从类加载器中查找与目标类名对应的字节码通过类加载器创建与字节码对应的目标类对象,为后续通过Java的反射机制执行动态接入的目标源代码对应的程序提供了基础,最终实现开发项目的动态扩展。
在一示例性实施例中,步骤S400,执行目标类对象对应的目标源代码之后,包括:
将执行目标类对象对应的目标源代码的结果,通过API接口返回至用户端。
其中,目标源代码为由用户端输入的待扩展代码,待扩展代码为根据新的逻辑需求生成的逻辑代码。
具体地,目标源代码为由用户端通过API接口输入的待扩展代码,通过步骤S100获取到目标源代码,并通过步骤S200、步骤S300和步骤S400实现对待扩展代码的测试、验证或执行后,将执行目标类对象对应的程序的结果,通过API接口返回至用户端,使用户端能够及时地获取新的目标源代码的测试、验证或执行的结果,并根据测试、验证或执行的结果对目标源代码进行修改或进一步的测试、验证或执行,并最终实现开发项目的动态扩展。
上述示例性实施例中,将执行目标类对象对应的目标源代码的结果,通过API接口返回至用户端,能够使用户端及时获取新的目标源代码的测试、验证或执行的结果,并对目标元代码进行进一步的测试、验证或执行,并最终实现开发项目的动态扩展。
图3是根据一具体示例性实施例示出的一种基于Java语言的动态扩展方法的流程图,如图3所示,包括:
集成spring框架,创建一个接收用户请求的Controller,并且编写好处理逻辑。处理逻辑为:收到用户输入的目标源代码字符串后,创建对应的内存编译器MemoryCompiler,调用内存编译器MemoryCompiler编译得到字节码。然后创建自定义的classloader类加载器,使用内存中保存的字节码生成对应的Class对象(类对象)。得到Class对象(类对象)后,使用Java的反射调用执行的方法,执行目标源代码,并将执行结果返回给用户。例如,具体方案为,通过web接口接收目标源代码并编译执行的方案,将目标源代码整合到已有的web系统中,web系统是Java中最常见的系统。具体地,暴露一个web API接口,该接口接收用户输入的Java程序源代码,API接口接收到输入后,动态内存编译器编译成新的Java类,通过再反射执行这个新的Java类,实现将目标源代码整合到已有的web系统中。
其中,创建对应的内存编译器MemoryCompiler的过程为,MemoryCompiler利用Java的内存编译器,动态编译Java目标源代码,生成二进制字节码。具体地,首先通过ToolProvider.getSystemJavaCompiler()得到一个compiler对象,再通过compiler对象调用MemoryJavaFileManager的构造器得到MemoryJavaFileManager实例对象,MemoryJavaFileManager作为参数调用compiler.getTask方法得到一个CompilationTask实例对象。通过执行CompilationTask对象的call方法,将目标源代码字符串编译成java字节码。
其中,创建自定义的classloader类加载器,使用内存中保存的字节码生成对应的Class对象的过程为,在自定义的类加载器中保存一个类名到类的字节码的map映射,具体地,当编译完成后,就把编译的类名和对应的字节码放到map中。当需要加载对应的目标类名对应的类时,从对应的映射中寻找目标类名对应的类的字节码,并使用类加载器的defineClass方法创建对应的class对象(类对象)。
其中,使用Java的反射调用执行的方法执行目标源代码的过程,在得到对应的Class对象后,使用反射调用指定的方法,例如,需要执行的是传入的目标源代码对应的类的一个静态的没有参数的execute方法,最后,将返回值返回给用户。
上述示例性实施例中,通过预先设置的API接口获取到新的目标源代码,并将目标源代码通过动态内存编译器编译成目标类对象(新的Java类),通过Java的反射机制执行这个新的目标类对象对应的程序,可以对目标源代码(新代码)中的程序进行测试和验证,实现开发项目的动态扩展。
应该理解的是,虽然图1-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-3中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
图4是根据一示例性实施例示出的一种基于Java语言的动态扩展装置框图。参照图4,该装置包括目标源代码获取单元401、代码编译单元402、代码加载单元403和代码执行单元404:
目标源代码接收单元401,被配置为执行通过API接口接收目标源代码,API接口是为接收目标源代码而预先创建的;
代码编译单元402,被配置为执行对目标源代码进行编译,得到对应的字节码;
代码加载单元403,被配置为执行通过类加载器对字节码进行加载,得到目标类对象;
代码执行单元404,被配置为执行目标类对象对应的目标源代码。
在一示例性实施例中,代码执行单元404还被配置为执行:通过Java的反射机制,执行目标类对象对应的目标源代码。
在一示例性实施例中,目标源代码接收单元401接收到的目标源代码为由用户端输入的待扩展代码,待扩展代码为根据新的逻辑需求生成的逻辑代码。
在一示例性实施例中,代码编译单元402还被配置为执行:通过Java的内存编译器,对目标源代码进行动态编译,得到字节码。
在一示例性实施例中,字节码与目标源代码中的类名对应,类名为目标源代码对应的标识;代码编译单元402还被配置为执行:将字节码与对应的类名存储至类加载器。
在一示例性实施例中,代码加载单元403还被配置为执行:获取目标类名;从类加载器中查找与目标类名对应的字节码;通过类加载器创建与字节码对应的目标类对象。
在一示例性实施例中,装置还包括执行结果返回单元,被配置为执行:将执行目标类对象对应的目标源代码的结果,通过API接口返回至用户端。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是根据一示例性实施例示出的一种基于Java语言的动态扩展的设备500的框图。例如,设备500可以是移动电话、计算机、数字广播终端、消息收发设备、游戏控制台、平板设备、医疗设备、健身设备、个人数字助理等。
参照图5,设备500可以包括以下一个或多个组件:处理组件502、存储器504、电力组件506、多媒体组件508、音频组件510、输入/输出(I/O)的接口512、传感器组件514以及通信组件516。
处理组件502通常控制设备500的整体操作,诸如与显示、电话呼叫、数据通信、相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。
存储器504被配置为存储各种类型的数据以支持在设备500的操作。这些数据的示例包括用于在设备500上操作的任何应用程序或方法的指令、联系人数据、电话簿数据、消息、图片、视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)、磁存储器、快闪存储器、磁盘或光盘。
电源组件506为设备500的各种组件提供电力。电源组件506可以包括电源管理系统,一个或多个电源,及其他与为设备500生成、管理和分配电力相关联的组件。
多媒体组件508包括在所述设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件510被配置为输出和/或输入音频信号。例如,音频组件510包括一个麦克风(MIC),当设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。
I/O接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件514包括一个或多个传感器,用于为设备500提供各个方面的状态评估。例如,传感器组件514可以检测到设备500的打开/关闭状态,组件的相对定位,例如所述组件为设备500的显示器和小键盘,传感器组件514还可以检测设备500或设备500一个组件的位置改变,用户与设备500接触的存在或不存在,设备500方位或加速/减速和设备500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器、陀螺仪传感器、磁传感器、压力传感器或温度传感器。
通信组件516被配置为便于设备500和其他设备之间有线或无线方式的通信。设备500可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件516经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。
在示例性实施例中,设备500可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器504,上述指令可由设备500的处理器520执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种基于Java语言的动态扩展方法,其特征在于,包括:
通过API接口接收目标源代码,所述API接口是为接收所述目标源代码而预先创建的;
对所述目标源代码进行编译,得到对应的字节码;
通过类加载器对所述字节码进行加载,得到目标类对象;
执行所述目标类对象对应的目标源代码。
2.根据权利要求1所述的方法,其特征在于,所述执行所述目标类对象对应的目标源代码,包括:
通过Java的反射机制,执行所述目标类对象对应的目标源代码。
3.根据权利要求1所述的方法,其特征在于,所述目标源代码为由用户端输入的待扩展代码,所述待扩展代码为根据新的逻辑需求生成的逻辑代码。
4.根据权利要求1所述的方法,其特征在于,所述对所述目标源代码进行编译,得到对应的字节码,包括:
通过Java的内存编译器,对所述目标源代码进行动态编译,得到所述字节码。
5.根据权利要求1所述的方法,其特征在于,所述字节码与所述目标源代码中的类名对应,所述类名为所述目标源代码对应的标识;
所述对所述目标源代码进行编译,得到对应的字节码之后,包括:
将所述字节码与对应的类名存储至所述类加载器。
6.根据权利要求5所述的方法,其特征在于,所述通过类加载器对所述字节码进行加载,得到目标类对象,包括:
获取目标类名;
从所述类加载器中查找与所述目标类名对应的字节码;
通过所述类加载器创建与所述字节码对应的目标类对象。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述执行所述目标类对象对应的目标源代码之后,包括:
将执行所述目标类对象对应的目标源代码的结果,通过所述API接口返回至用户端。
8.一种基于Java语言的动态扩展装置,其特征在于,包括:
目标源代码接收单元,被配置为执行通过API接口接收目标源代码,所述API接口是为接收所述目标源代码而预先创建的;
代码编译单元,被配置为执行对所述目标源代码进行编译,得到对应的字节码;
代码加载单元,被配置为执行通过类加载器对所述字节码进行加载,得到目标类对象;
代码执行单元,被配置为执行所述目标类对象对应的目标源代码。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至7中任一项所述的基于Java语言的动态扩展方法。
10.一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至7中任一项所述的基于Java语言的动态扩展方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010513093.3A CN111736916A (zh) | 2020-06-08 | 2020-06-08 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010513093.3A CN111736916A (zh) | 2020-06-08 | 2020-06-08 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111736916A true CN111736916A (zh) | 2020-10-02 |
Family
ID=72648488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010513093.3A Pending CN111736916A (zh) | 2020-06-08 | 2020-06-08 | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111736916A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199110A (zh) * | 2020-10-16 | 2021-01-08 | 上海睿成软件有限公司 | 一种免重启运维升级方法、系统、装置和介质 |
CN112631695A (zh) * | 2020-12-22 | 2021-04-09 | 北京达佳互联信息技术有限公司 | 一种数据校验方法、装置、电子设备及存储介质 |
CN112685049A (zh) * | 2021-01-22 | 2021-04-20 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
CN113051002A (zh) * | 2020-12-24 | 2021-06-29 | 完美世界(北京)软件科技发展有限公司 | 数据编辑方法、设备及存储介质 |
CN113204391A (zh) * | 2021-06-09 | 2021-08-03 | 中国银行股份有限公司 | 程序修改方法及装置 |
CN113342323A (zh) * | 2021-06-29 | 2021-09-03 | 银清科技有限公司 | 软件在线开发的方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090144714A1 (en) * | 2007-12-04 | 2009-06-04 | Nan Fan | Automatic deployment of java classes using byte code instrumentation |
CN103970563A (zh) * | 2014-04-15 | 2014-08-06 | 四川长虹电器股份有限公司 | 动态加载安卓类的方法 |
CN107025105A (zh) * | 2016-09-23 | 2017-08-08 | 阿里巴巴集团控股有限公司 | 代码生成方法及装置 |
CN107992723A (zh) * | 2017-11-29 | 2018-05-04 | 南京莱斯信息技术股份有限公司 | 一种基于动态链接库的Java源码保护方法 |
CN109976761A (zh) * | 2019-02-27 | 2019-07-05 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN110781081A (zh) * | 2019-10-12 | 2020-02-11 | 南京信息职业技术学院 | 一种移动应用回调强制触发方法、系统及存储介质 |
-
2020
- 2020-06-08 CN CN202010513093.3A patent/CN111736916A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090144714A1 (en) * | 2007-12-04 | 2009-06-04 | Nan Fan | Automatic deployment of java classes using byte code instrumentation |
CN103970563A (zh) * | 2014-04-15 | 2014-08-06 | 四川长虹电器股份有限公司 | 动态加载安卓类的方法 |
CN107025105A (zh) * | 2016-09-23 | 2017-08-08 | 阿里巴巴集团控股有限公司 | 代码生成方法及装置 |
CN107992723A (zh) * | 2017-11-29 | 2018-05-04 | 南京莱斯信息技术股份有限公司 | 一种基于动态链接库的Java源码保护方法 |
CN109976761A (zh) * | 2019-02-27 | 2019-07-05 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN110781081A (zh) * | 2019-10-12 | 2020-02-11 | 南京信息职业技术学院 | 一种移动应用回调强制触发方法、系统及存储介质 |
Non-Patent Citations (3)
Title |
---|
WEIXIN_33717117: "JAVA动态编译和热更新", pages 1 - 6, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_33717117/article/details/91364565> * |
WEIXIN_33778778: "JAVA中动态编译JAVA代码", pages 1 - 4, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_33778778/article/details/92543596> * |
于庆: "基于动态解密技术的Java Web源代码保护研究", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 6 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199110A (zh) * | 2020-10-16 | 2021-01-08 | 上海睿成软件有限公司 | 一种免重启运维升级方法、系统、装置和介质 |
CN112631695A (zh) * | 2020-12-22 | 2021-04-09 | 北京达佳互联信息技术有限公司 | 一种数据校验方法、装置、电子设备及存储介质 |
CN112631695B (zh) * | 2020-12-22 | 2024-06-11 | 北京达佳互联信息技术有限公司 | 一种数据校验方法、装置、电子设备及存储介质 |
CN113051002A (zh) * | 2020-12-24 | 2021-06-29 | 完美世界(北京)软件科技发展有限公司 | 数据编辑方法、设备及存储介质 |
WO2022134717A1 (zh) * | 2020-12-24 | 2022-06-30 | 完美世界(北京)软件科技发展有限公司 | 数据驱动的系统功能加载方法、设备及存储介质 |
CN112685049A (zh) * | 2021-01-22 | 2021-04-20 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
CN112685049B (zh) * | 2021-01-22 | 2024-02-13 | 大连高德瑞信科技有限公司 | 一种java字节码编译方法 |
CN113204391A (zh) * | 2021-06-09 | 2021-08-03 | 中国银行股份有限公司 | 程序修改方法及装置 |
CN113342323A (zh) * | 2021-06-29 | 2021-09-03 | 银清科技有限公司 | 软件在线开发的方法及装置 |
CN113342323B (zh) * | 2021-06-29 | 2024-03-29 | 银清科技有限公司 | 软件在线开发的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111736916A (zh) | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 | |
CN111026396B (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN111538502A (zh) | 安装包的处理方法、装置、电子设备及存储介质 | |
CN113377370A (zh) | 一种文件处理方法、装置、电子设备及存储介质 | |
CN112114814A (zh) | 编译文件确定方法及装置、应用程序生成方法及装置 | |
CN111913756B (zh) | 应用程序的优化方法、装置、系统、电子设备及存储介质 | |
CN111221613B (zh) | 程序调用方法及装置、存储介质 | |
CN110851370B (zh) | 程序测试方法及装置、存储介质 | |
CN106293683B (zh) | 一种项目的编译方法及装置 | |
CN111638907A (zh) | 第三方代码片段的替换方法、装置、终端及存储介质 | |
CN112631695B (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN108563487B (zh) | 用户界面的更新方法及装置 | |
CN109933357B (zh) | 应用程序升级方法及装置 | |
CN112445484B (zh) | 一种寄存器处理方法、装置、电子设备及存储介质 | |
CN107193622B (zh) | 代码编译的处理方法、装置及终端 | |
CN111831292A (zh) | 生成安装包的方法、装置、存储介质和电子设备 | |
CN111597106A (zh) | 一种埋点管理方法及装置 | |
CN111596949B (zh) | 一种开发应用程序的方法及装置 | |
CN110569037A (zh) | 数据写入的方法和装置 | |
CN113342355B (zh) | 一种代码编译方法、装置、电子设备及存储介质 | |
CN111273910B (zh) | 获取资源号码标识符的方法、装置及存储介质 | |
CN111124553B (zh) | 一种程序执行方法、装置、终端及存储介质 | |
CN113778440B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110659081B (zh) | 用于程序对象的文件处理方法、装置及电子设备 | |
CN112445483B (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 |