一种Java运行方法、系统及终端与流程

文档序号:19323914发布日期:2019-12-04 00:51阅读:318来源:国知局
一种Java运行方法、系统及终端与流程

本发明涉及计算机技术领域,具体涉及一种java程序运行方法、系统及终端。



背景技术:

java是在编程中经常使用到的语言,但是相较于相较python或php等动态语言。java程序在运行过程中动态实时修改能力一直比较薄弱。

现有技术中存在一种新的运行时动态变更机制,只要按照约定的路径规则对放置最新版本的jar包,即可实现运行逻辑的实时修改,所谓jar文件是java二进制代码的包装形式,java类经编译后,压缩为扩展名为jar的文件,用来提供相应的功能。java程序需要该功能,就加载jar文件中的类即可。jar文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和java虚拟机这样的工具直接使用。虽然已经有动态代理或字节码修改等方案达到类似效果,但要求开发者实现动态代理甚至修改字节码,技术要求极高。

cn102081523a公开了一种动态加载系统,所述的动态加载系统包括包生成模块、文件上传模块以及动态加载模块。所述的动态加载模块中若系统类加载器没有成功加载打包文件,则1类加载器会尝试加载该打包文件,若1类加载器也不能成功加载,则2类加载器尝试装载。但没有提出加载的处理逻辑。

为解决以上问题,本发明提供了一种java程序运行方法、系统及终端,相对于现有技术,整个处理逻辑更加容易操作,易用性强。



技术实现要素:

本发明解决的技术问题是,提供了一种java程序运行方法、系统及终端。所述的一种java程序运行方法及系统可以实现在java编程中,运行逻辑的实时修改。

为了解决上述技术问题,本发明提供的技术方案为:

一种java程序运行方法,其特征在于,包括:

获取约定路径下的类定义列表;

将列表中的类定义根据自定义规则进行排序;

判断当前是否有待加载的类定义;

若存在待加载的类定义则使用该类定义,完成已加载类;

若不存在待加载的类定义,继续查找待加载的类定义。

优选地,所述的自定义规则包括:路径、文件名、时间的自定义规则。约定的规则可以自定义,但是通用的规则为路径、文件名、时间进行自定义,但不局限于这三种的自定义。

优选地,所述的继续查找待加载的类定义的方法为:

判断当前路径是否已经查找完毕;

若查找完毕在下一个优先级的路径中查找;

若查找到待加载类,返回判断当前路径是否有待加载的类定义;

若未查找到待加载类,提示类不存在。

优选地,所述的已加载的类包括定时更新过程。所述的定时更新过程能够每隔指定时间,自动扫描约定路径下的文件变动,如发现文件则比对是否跟已加载的类重名,重名则使用最新的定义替换掉jvm中已有的类定义。

优选地,所述的定时更新过程为:

获取约定的路径列表;

对比已扫描的路径列表;

判断两个列表是否有差异;

若无差异完成新路径扫描任务。

优选地,所述的判断两个列表是否有差异,若判断有差异则:

根据自定义规则对新增路径进行排序;

获取新增路径下的类定义列表;

判断新增路径下的类定义是否已加载;

若已加载替换已有的类定义并保存已扫描的路径列表;

完成新路径的扫描任务。

优选地,所述的若判断新增路径下的类定义未加载,则包括:

判断新增路径是否已查找完毕;

若未查找完毕处理下一个新增路径继续进行查找;

若查找出已加载类,返回判断新增路径下的类定义是否已加载;

若未查找出已加载类,完成路径扫描任务。

一种java程序运行系统,包括:

类定义列表获取模块:所述的类定义列表获取模块用于获取约定路径下的类定义列表;

自定义排序模块:所述的自定义排序模块用于将列表中的类定义根据自定义规则进行排序;

判断模块:所述的判断模块用于判断当前是否有待加载的类定义;若存在待加载的类定义则使用该类定义,完成已加载类;若不存在待加载的类定义,继续查找待加载的类定义。

优选地,所述的java程序运行系统还包括已加载的类更新模块,所述的已加载类更新模块更新加载类的过程为:

获取约定的路径列表;

对比已扫描的路径列表;

判断两个列表是否有差异;

若无差异完成新路径扫描任务。

所述的判断两个列表是否有差异,若判断有差异则:

根据自定义规则对新增路径进行排序;

获取新增路径下的类定义列表;

判断新增路径下的类定义是否已加载;

若已加载替换已有的类定义并保存已扫描的路径列表;

完成新路径的扫描任务。

所述的若判断新增路径下的类定义未加载,则包括:

判断新增路径是否已查找完毕;

若未查找完毕处理下一个新增路径继续进行查找;

若查找出已加载类,返回判断新增路径下的类定义是否已加载;

若未查找出已加载类,完成路径扫描任务。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序指令,该程序指令适于由处理器加载并执行一种java程序运行方法。

一种移动终端,包括处理器以及存储器,所述的处理器用于执行存储器中存储的程序,以实现一种java程序运行方法。

与现有技术相比,本发明具有的有益效果为:使用自定义的java类加载器,当jvm加载和使用某一个类时,自定义的类加载起会根据约定好的路径,优先加载符合规则的最新的类。未加载类在使用时获得最新版。每隔指定时间,自动扫描约定路径下的文件变动,如发现文件则比对是否跟已加载的类重名,重名则使用最新的定义替换掉jvm中已有的类定义。约定的规则可以自定义,包括但不限于路径,文件名,修改时间等。此方案不仅可应用于代码的修改,通过对加载规则的调整,还可适用于对待加载内容的安全校验,从而实现核心业务代码的安全保护。本发明所述的整个处理逻辑更加容易操作,易用性强。在本方案中,开发者可以完全专心开发新代码,只需要考虑最新运行包的路径即可,大幅降低此场景下对开发者的要求。

附图说明

下面结合附图和实施例对本发明进一步说明。

图1是本发明所述的一种java程序运行方法的流程示意图;

图2是本发明所述的一种加载类定时更新方法流程图;

图3是本发明所述的一种java程序运行系统的结构图。

具体实施方式

现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本流程图,因此其仅显示与本发明有关的流程。

实施例1

如图1所示,本发明是一种java程序运行方法,所述的方法具体为:

s1.获取约定路径下的类定义列表;

s2.将列表中的类定义列表根据自定义规则进行排序;

s3.判断当前是否有待加载的类定义;

s4.若存在待加载的类定义则使用该类定义,完成已加载类;

s5.若不存在待加载的类定义,继续查找待加载的类定义。

其中说明的是,所述的jvm(javavirtualmachine),称java虚拟机,可运行java代码的虚拟计算机,只要根据jvm规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何java代码能够在该系统上运行,jvm拥有自己完善的硬件,如处理器、堆栈、寄存器等,并且还具有相应的指令系统。

java类加载器,java程序包含很多的类文件,java类装载器从类文件获取不依赖平台的字节码,将他们装载到jvm内存空间运行。

所述的jar文件:包含多个java类文件和相关资源的同一存储库。是java程序组件分发的一种通用形式。

本发明所述的方法是使用自定义的java类加载器,当jvm加载和使用某一个类时,自定义的类加载起会根据约定好的路径,优先加载符合规则的最新的类。每隔指定时间,自动扫描约定路径下的文件变动,如发现文件则比对是否跟已加载的类重名,重名则使用最新的定义替换掉jvm中已有的类定义。未加载类在使用时获得最新版。具体的实现方法如下流程实现:

步骤s1:获取约定路径下的类定义列表,获取指定路径下的包含的类定义。

步骤s2:将列表中的类定义列表根据自定义规则进行排序。自定义规则包括路径、文件名、时间的自定义将加载类进行排序,这种约定的规则可以自定义,本文列举路径、文件名或修改时间,但不限于这三种。

步骤s3:判断当前是否有待加载的类定义。首先运行待加载的类,其中,所述的类经编译后,压缩为扩展名为jar的文件,用来提供相应的功能。

步骤s4:若存在待加载的类定义则使用该类定义,完成已加载类。

步骤s5:若不存在待加载的类定义,继续查找待加载的类定义。所述的继续查找待加载的类定义的方法为:判断当前路径是否已经查找完毕;若查找完毕在下一个优先级的路径中查找。所述的在下一个优先级的路径中查找后,若有待加载的类定义则返回判断当前路径是否有待加载的类定义。

使用自定义的java类加载器,当jvm加载和使用某一个类时,自定义的类加载起会根据约定好的路径,优先加载符合规则的最新的类。未加载类在使用时获得最新版。此方案不仅可应用的代码的修改,通过对加载规则的调整,还可适用于对待加载内容的安全校验,从而实现核心业务代码的安全保护。

实施例2

所述的已加载的类包括定时更新过程,如图2所示为已加载的类的定时更新过程的流程示意图,所述的定时更新的过程为:

获取约定的路径列表;

对比已扫描的路径列表;

判断两个列表是否有差异;

无差异完成新路径扫描任务。

所述的判断两个列表是否有差异,若判断有差异则:

根据自定义规则对新增路径进行排序;

获取新增路径下的类定义列表;

判断新增路径下的类定义是否已加载;

若已加载替换已有的类定义并保存已扫描的路径列表;

完成新路径的扫描任务。

所述的若判断新增路径下的类定义未加载,则包括:

判断新增路径是否已查找完毕;

若未查找完毕处理下一个新增路径继续进行查找;

若查找出已加载类,返回判断新增路径下的类定义是否已加载;

若未查找出已加载类,完成路径扫描任务。

通过每隔指定时间,自动扫描约定路径下的文件变动,如发现文件则比对是否跟已加载的类重名,重名则使用最新的定义替换掉jvm中已有的类定义,实现类的自动更新过程。

实施例3

如图3所示,本发明提供了一种系统:

类定义列表获取模块1:所述的类定义列表获取模块用于获取约定路径下的类定义列表;

自定义排序模块2:所述的自定义排序模块用于将列表中的类定义根据自定义规则进行排序;

判断模块3:所述的判断模块用于判断当前是否有待加载的类定义;若存在待加载的类定义则使用该类定义,完成已加载类;若不存在待加载的类定义,继续查找待加载的类定义。

所述的java程序运行系统还包括已加载的类更新模块,所述的已加载类更新模块更新加载类的过程为:

获取约定的路径列表;

对比已扫描的路径列表;

判断两个列表是否有差异;

若无差异完成新路径扫描任务。

所述的判断两个列表是否有差异,若判断有差异则:

根据自定义规则对新增路径进行排序;

获取新增路径下的类定义列表;

判断新增路径下的类定义是否已加载;

若已加载替换已有的类定义并保存已扫描的路径列表;

完成新路径的扫描任务。

所述的若判断新增路径下的类定义未加载,则包括:

判断新增路径是否已查找完毕;

若未查找完毕处理下一个新增路径继续进行查找;

若查找出已加载类,返回判断新增路径下的类定义是否已加载;

若未查找出已加载类,完成路径扫描任务。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序指令,该程序指令适于由处理器加载并执行一种java程序运行方法。

本发明还提供一种移动终端,包括处理器以及存储器,所述的处理器用于执行存储器中存储的程序,以实现一种java程序运行方法。

上列详细说明是针对本发明可行实施例的具体说明,以上实施例并非用以限制本发明的专利范围,凡未脱离本发明所为的等效实施或变更,均应包含于本案的专利范围中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1