Java反射实现方法、装置和系统制造方法及图纸

技术编号:19634726 阅读:28 留言:0更新日期:2018-12-01 15:30
本发明专利技术公开了一种Java反射实现方法、装置和系统。该反射实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。根据本发明专利技术实施例提供的Java反射实现方法,采用基于Java字节码框架ASM和缓存的反射实现方法,可以提升Java反射的性能和效率。

Java Reflection Implementation Method, Device and System

The invention discloses a Java reflection implementation method, device and system. The reflection implementations include: when Java virtual machine starts class loading, using Java bytecode framework ASM to generate reflection processing classes for Java classes; retrieving index values of Java classes from reflection processing classes; storing reflection processing classes and index values into caches; binding reflection processing classes and index values to Java classes through caches; and caching-based. Reflective processing class and index value, reflection calls Java class method. According to the Java reflection implementation method provided in the embodiment of the present invention, the performance and efficiency of Java reflection can be improved by adopting the reflection implementation method based on Java bytecode framework ASM and cache.

【技术实现步骤摘要】
Java反射实现方法、装置和系统
本专利技术涉及计算机
,尤其涉及Java反射实现方法、装置和系统。
技术介绍
Java反射机制主要是指程序运行时,允许访问、检测和修改自身状态或行为的一种能力。在Java项目开发过程中,为了程序的灵活性经常会用到Java反射机制,它能够方便程序员创建灵活的代码,这些代码可以在运行时装配,而无需重新修改代码并重新编译。Java反射机制的优点主要体现在它的动态性方面,并且可以降低类之间的藕合性,大大提高系统的灵活性和扩展性,同时与Java动态编译相结合,可以实现强大的功能。通常,运行一个Java程序,首先Java类必须被Java虚拟机加载,运行程序都是在编译时就已经加载了所需要的类。“编译时”是指编译器把Java代码翻译成设备可以识别的代码,编译器在编译时会检查语法有无错误、关键字或者名称书写有无错误,然后加载类;“运行时”是指程序开始,代码被装载到内存中后,运行时检查就是在内存中做相关检查与判断。Java的反射机制在编译时并不确定是哪个类被加载了,而是在程序运行时才加载和使用。Java反射过程需要在运行时做一些编译的工作和解释操作,如语法检查、解析字节码、将内存中的对象进行解析等,Java虚拟机无法对代码进行优化,因此通过Java反射调用类的方法的效率要比直接调用低,性能比直接调用慢。
技术实现思路
本专利技术实施例提供Java反射实现方法、装置和系统,可以提高Java反射调用的效率和性能。根据本专利技术实施例的一方面,提供一种Java反射实现方法,包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。根据本专利技术实施例的另一方面,提供一种Java反射实现装置,包括:反射处理类生成模块,用于Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;方法索引值获取模块,用于从反射处理类中获取Java类的方法的索引值;缓存模块,用于将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;反射调用模块,用于基于缓存中的反射处理类和索引值,反射调用Java类的方法。根据本专利技术实施例的再一方面,提供一种Java反射实现系统,包括:存储器、处理器、通信接口和总线;存储器、处理器和通信接口通过总线连接并完成相互间的通信;存储器用于存储程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行一种Java反射实现方法,其中,Java反射实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从反射处理类中获取Java类的方法的索引值;将反射处理类和索引值存入缓存,反射处理类和索引值通过缓存与Java类绑定;基于缓存中的反射处理类和索引值,反射调用Java类的方法。根据本专利技术实施例中的Java反射实现方法、装置和系统,采用基于Java字节码框架ASM以及缓存Cache的反射实现方法,可以大大提升反射的效率。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是示出根据本专利技术一实施例的Java反射实现方法的流程图;图2是图1中将反射处理类和索引值存入缓存的第一示例流程图;图3是图1中将反射处理类和索引值存入缓存的第二示例流程图;图4是示出图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第一示例流程图;图5是图1中基于缓存中的反射处理类和索引值反射调用Java类的方法的第二示例流程图;图6是示出根据本专利技术一实施例的Java反射实现装置的结构示意图;图7是图6中缓存模块的具体的结构示意图;图8是图6中反射调用模块的具体的结构示意图;图9是示出了根据本专利技术实施例的Java反射实现系统的示例性硬件架构的结构图。具体实施方式下面将详细描述本专利技术的各个方面的特征和示例性实施例,为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本专利技术,并不被配置为限定本专利技术。对于本领域技术人员来说,本专利技术可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本专利技术的示例来提供对本专利技术更好的理解。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。在本专利技术实施例中,ASM是ASSEMBLY的缩写,可以解释为汇编。对于爪哇(Java)语言而言,ASM就是字节码级别的编程。ASM是一个Java字节码操纵框架,它可以用于动态生成类Class或者增强既有类的功能。ASM可以直接产生二进制Class文件,也可以在类被加载入Java虚拟机之前动态改变类行为。JavaClass被存储在严格格式定义的类文件里,这些类文件拥有足够的元数据来解析类中的所有元素:例如类名称、方法、属性以及Java字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。也就是说,ASM可以动态生成二进制格式的存根类STUB或其它代理类,或者在类被Java虚拟机装入内存之前,动态修改类。ASM框架中的核心类包括用于ClassReader类、ClassWriter类和ClassAdapter类。其中,ClassReader类用来读取和解析编译过的class字节码文件;ClassWriter类用来重新构建编译后的类,比如说修改类名、属性以及方法,甚至可以生成新的类的字节码文件;ClassAdapter类实现了ClassVisitor接口,ClassAdapter类中提到的ClassVisitor接口,可以用于定义在读取Class字节码时会触发的事件,如类头解析完成、注解解析、字段解析、方法解析等。为了更好的理解本专利技术,下面将结合附图,详细描述根据本专利技术实施例的Java反射实现方法、装置和系统,应注意,这些实施例并不是用来限制本专利技术公开的范围。图1是示出根据本专利技术实施例的Java反射实现方法的流程图。如图1所示,本实施例中的Java反射实现方法100包括以下步骤:步骤S110,Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类。步骤S120,从反射处理类中获取Java类的方法的索引值。步骤S130,将反射处理类和索引本文档来自技高网...

【技术保护点】
1.一种Java反射实现方法,其特征在于,所述实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从所述反射处理类中获取所述Java类的方法的索引值;将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法。

【技术特征摘要】
1.一种Java反射实现方法,其特征在于,所述实现方法包括:Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;从所述反射处理类中获取所述Java类的方法的索引值;将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法。2.根据权利要求1所述的实现方法,其特征在于,所述将所述反射处理类和所述索引值存入缓存,包括:生成与所述Java类的方法对应的反射方法对象;在所述反射方法对象中封装所述反射处理类和所述索引值;将所述反射方法对象存入所述缓存。3.根据权利要求2所述的实现方法,其特征在于,所述将所述反射方法对象存入所述缓存,包括:创建所述Java类的反射方法缓存对象,在所述反射方法缓存对象中保存所述反射方法对象;将所述反射方法缓存对象存入所述缓存。4.根据权利要求1所述的实现方法,其特征在于,所述基于所述缓存中的反射处理类和所述索引值,反射调用所述Java类的方法,包括:根据所述Java类的类名从所述缓存中提取所述反射处理类和所述索引值;通过所述索引值定位所述反射处理类中的所述Java类的方法。5.根据权利要求4所述的实现方法,其特征在于,所述根据所述Java类的类名从所述缓存中提取所述反射处理类和所述索引值,包括:通过所述Java类的类名获取所述缓存中与所述Java类对应的反射方法缓存对象;根据所述Java类的方法的方法名从所述反射方法缓存对象中获取与所述Java类的方法对应的反射方法对象;从所述反射方法对象中提取所述反射处理类和所述索引值。6.一种Java反射实现装置,其特征在于,所述实现装置包括:反射处理类生成模块,用于Java虚拟机启动类加载时,利用Java字节码框架ASM为Java类生成反射处理类;方法索引值获取模块,用于从所述反射处理类中获取所述Java类的方法的索引值;缓存模块,用于将所述反射处理类和所述索引值存入缓存,所述反射处理类和所述索引值通过所述缓存与所述Java类绑定;反射调用模块,用于基于所述缓存中的反射处理类和所述索引值,反射调用所...

【专利技术属性】
技术研发人员:叶荣光魏建荣陈翔宇
申请(专利权)人:中国移动通信集团福建有限公司中国移动通信集团公司
类型:发明
国别省市:福建,35

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

1