信息处理方法、装置、存储介质及电子设备与流程

文档序号:26003378发布日期:2021-07-23 21:21阅读:93来源:国知局
信息处理方法、装置、存储介质及电子设备与流程

本公开涉及计算机技术领域,具体地,涉及一种信息处理方法、装置、存储介质及电子设备。



背景技术:

桥接方法是为了使java泛型方法生成的字节码和java1.5版本前的字节码相兼容,由编译器自动生成的方法。例如当子类重写了父类中带有泛型的方法,或者子类方法和父类方法返回值不一致的时候,java编译器会自动生成桥接方法。

然而,针对程序运行期间的一些场景,需要通过桥接方法找到桥接方法的实际方法再进行后续的操作。例如,程序运行过程中,在使用和解析实际方法的注解(例如:@cacheable、@webserviceref)时,通过java的反射机制获取到的可能是实际方法的桥接方法,由于桥接方法的相关属性(比如:参数类型、返回类型)是不准确的,必须使用实际方法的相关属性才能进行后续的操作。

进而,通过桥接方法找到实际方法是必须解决的问题。



技术实现要素:

为克服相关技术中存在的问题,本公开提供一种信息处理方法、装置、存储介质及电子设备。

根据本公开实施例的第一方面,提供一种信息处理方法,所述方法包括:

在目标程序运行过程中,响应于获取到满足预设条件的目标桥接方法,根据所述目标桥接方法所在类的第一字节码文件,确定所述第一字节码文件包括的方法信息,其中,所述预设条件表征需要根据所述目标桥接方法获取与所述目标桥接方法对应的目标实际方法;

遍历所述第一字节码文件包括的方法信息,得到所述目标桥接方法的相关信息,并根据所述目标桥接方法的相关信息,确定所述目标桥接方法的属性表;

根据所述属性表中包括的目标指令,获取与所述目标桥接方法对应的目标实际方法的相关信息,其中,所述目标指令为指示存储所述目标实际方法的相关信息的指令。

可选地,所述根据所述目标桥接方法所在类的第一字节码文件,确定所述第一字节码文件包括的方法信息,包括:

加载所述目标桥接方法所在类的第一字节码文件;

解析所述第一字节码文件包括的方法,得到第一字节码文件包括的方法信息。

可选地,所述根据所述属性表中包括的目标指令,获取与所述目标桥接方法对应的目标实际方法的相关信息,包括:

获取由所述目标指令指向存储所述目标实际方法的相关信息的索引值;

根据所述索引值确定所述目标实际方法的完全限定名;

根据所述完全限定名,确定所述目标实际方法的相关信息。

可选地,所述根据所述完全限定名,确定所述目标实际方法的相关信息,包括:

根据所述完全限定名,确定所述目标实际方法所在类;

若所述目标实际方法所在类与所述目标桥接方法所在类为同一个类,则从所述第一字节码文件包括的方法信息中,查询得到所述目标实际方法的相关信息。

可选地,所述根据所述完全限定名,确定所述目标实际方法的相关信息,还包括:

若所述目标实际方法所在类为所述目标桥接方法所在类的父类,则根据所述目标实际方法所在类的第二字节码文件,确定所述第二字节码文件包括的方法信息;

遍历所述第二字节码文件包括的方法信息,得到所述目标实际方法的相关信息。

可选地,所述根据所述目标实际方法所在类的第二字节码文件,确定所述第二字节码文件包括的方法信息,包括:

加载所述目标实际方法所在类的第二字节码文件;

解析所述第二字节码文件包括的方法,得到所述第二字节码文件包括的方法信息。

可选地,在所述获取与所述目标桥接方法对应的目标实际方法的相关信息之后,所述方法还包括:

将所述目标桥接方法的相关信息和所述目标实际方法的相关信息对应缓存。

可选地,所述方法还包括:

在所述目标程序运行过程中,扫描携带注解信息的方法;

当扫描到的携带注解信息的方法为桥接方法时,确定获取到满足预设条件的目标桥接方法。

可选地,所述目标程序为java程序;

所述目标桥接方法的属性表为所述目标桥接方法的code属性表;以及

所述目标指令为invokevirtual指令。

根据本公开实施例的第二方面,提供一种信息处理装置,所述装置包括:

第一确定模块,用于在目标程序运行过程中,响应于获取到满足预设条件的目标桥接方法,根据所述目标桥接方法所在类的第一字节码文件,确定所述第一字节码文件包括的方法信息,其中,所述预设条件表征需要根据所述目标桥接方法获取与所述目标桥接方法对应的目标实际方法;

第二确定模块,用于遍历所述第一字节码文件包括的方法信息,得到所述目标桥接方法的相关信息,并根据所述目标桥接方法的相关信息,确定所述目标桥接方法的属性表;

获取模块,用于根据所述属性表中包括的目标指令,获取与所述目标桥接方法对应的目标实际方法的相关信息,其中,所述目标指令为指示存储所述目标实际方法的相关信息的指令。

可选地,所述第一确定模块通过如下方式确定所述第一字节码文件包括的方法信息:

根据所述目标桥接方法所在类的第一字节码文件,加载所述目标桥接方法所在类的第一字节码文件;

解析所述第一字节码文件包括的方法,得到第一字节码文件包括的方法信息。

可选地,所述获取模块通过如下方式根据所述属性表中包括的目标指令,获取与所述目标桥接方法对应的目标实际方法的相关信息:

获取由所述目标指令指向存储所述目标实际方法的相关信息的索引值;

根据所述索引值确定所述目标实际方法的完全限定名;

根据所述完全限定名,确定所述目标实际方法的相关信息。

可选地,所述获取模块通过如下方式根据所述完全限定名,确定所述目标实际方法的相关信息:

根据所述完全限定名,确定所述目标实际方法所在类;

若所述目标实际方法所在类与所述目标桥接方法所在类为同一个类,则从所述第一字节码文件包括的方法信息中,查询得到所述目标实际方法的相关信息。

可选地,所述获取模块还用于:

若所述目标实际方法所在类为所述目标桥接方法所在类的父类,则根据所述目标实际方法所在类的第二字节码文件,确定所述第二字节码文件包括的方法信息;

遍历所述第二字节码文件包括的方法信息,得到所述目标实际方法的相关信息。

可选地,所述获取模块采用如下方式根据所述目标实际方法所在类的第二字节码文件,确定所述第二字节码文件包括的方法信息:

加载所述目标实际方法所在类的第二字节码文件;

解析所述第二字节码文件包括的方法,得到所述第二字节码文件包括的方法信息。

可选地,在所述获取与所述目标桥接方法对应的目标实际方法的相关信息之后,所述装置还包括存储模块;

所述存储模块用于将所述目标桥接方法的相关信息和所述目标实际方法的相关信息对应缓存。

可选地,所述获取模块还用于:

在所述目标程序运行过程中,扫描携带注解信息的方法;

当扫描到的携带注解信息的方法为桥接方法时,确定获取到满足预设条件的目标桥接方法。

可选地,所述目标程序为java程序;

所述目标桥接方法的属性表为所述目标桥接方法的code属性表;以及

所述目标指令为invokevirtual指令。

通过上述技术方案,在目标程序运行过程中,响应于获取到目标桥接方法,且目标桥接方法满足需要根据目标桥接方法的目标实际方法时,根据目标桥接方法所在类的第一字节码文件,可查询得到目标桥接方法的属性表,根据目标桥接方法属性表中包括的目标指令,可直接获取到与目标桥接方法对应的目标实际方法的相关信息,查找目标实际方法耗时短,且不论目标桥接方法和目标实际方法之间的继承关系多复杂,包括目标实际方法的类中的方法数量有多么众多,查找目标实际方法的耗时都不会增长,查找效率高。

本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1是根据一示例性实施例示出的一种信息处理方法的流程图。

图2是根据一示例性实施例示出的一种信息处理方法的流程图。

图3是根据一示例性实施例示出的一种信息处理装置的框图。

图4是根据一示例性实施例示出的一种电子设备的框图。

具体实施方式

以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。

目前,在程序运行期间,查找桥接方法的实际方法时,通过遍历所有方法,先找到桥接方法所在类的所有父类的方法,然后根据所有父类的方法名、参数个数、泛型类型参数等,逐一与桥接方法进行匹配,确定得到桥接方法的实际方法。

在上述方法中,当桥接方法和实际方法的继承关系越来越复杂,需要查找方法数量越来越多时,利用遍历的方式查找桥接方法的实际方法耗时会越来越长。

有鉴于此,本公开提供一种信息处理方法,以提升查找桥接方法的实际方法的效率。

图1是根据一示例性实施例示出的一种信息处理方法的流程图,如图1所示,信息处理方法,包括以下步骤。

在步骤s11中,在目标程序运行过程中,响应于获取到满足预设条件的目标桥接方法,根据目标桥接方法所在类的第一字节码文件,确定第一字节码文件包括的方法信息。

其中,预设条件表征需要根据目标桥接方法获取与目标桥接方法对应的目标实际方法。获取到满足预设条件的目标桥接方法可以是获取到带有桥接方法标识的目标桥接方法。

进而,根据目标桥接方法所在类的字节码文件,可以确定字节码文件包括的方法信息,也可以确定得到字节码文件包括的桥接方法的相关信息。

本公开为描述方便,将目标桥接方法所在类的字节码文件称为第一字节码文件。

一种实施方式中,例如可通过如下方式确定第一字节码文件包括的方法信息:

根据目标桥接方法所在类的第一字节码文件,加载目标桥接方法所在类的第一字节码文件,之后解析第一字节码文件包括的所有方法,得到第一字节码文件包括的所有方法的方法信息。

在步骤s12中,遍历第一字节码文件包括的方法信息,得到目标桥接方法的相关信息,并根据目标桥接方法的相关信息,确定目标桥接方法的属性表。

一种实施方式中,在得到第一字节码文件包括的所有方法的方法信息后,从第一字节码文件包括的所有方法的方法信息中,可遍历得到目标桥接方法的相关信息,根据目标桥接方法的相关信息,可确定得到目标桥接方法的属性表。

其中,目标桥接方法的属性表中存储了怎么运行目标桥接方法,运行目标桥接方法的指令等信息。

在步骤s13中,根据属性表中包括的目标指令,获取与目标桥接方法对应的目标实际方法的相关信息,其中,目标指令为指示存储目标实际方法的相关信息的指令。

一种实施方式中,例如可通过如下方式获取与目标桥接方法对应的目标实际方法的相关信息:

根据属性表中包括的目标指令,获取由目标指令指向存储目标实际方法的相关信息的索引值,根据指向存储目标实际方法的相关信息的索引值,确定目标实际方法的完全限定名,根据目标实际方法的完全限定名,确定目标实际方法的相关信息。

其中,例如可通过如下方式根据完全限定名,确定目标实际方法的相关信息:

由于完全限定名中包括对应方法的包名、类名、方法名、参数列表等,本公开可根据目标实际方法的完全限定名,可确定目标实际方法所在类。

其中,一种实施方式中,若目标实际方法所在类与目标桥接方法所在类为同一个类,则从第一字节码文件包括的方法信息中,查询得到目标实际方法的相关信息。

其中,另一种实施方式中,若目标实际方法所在类为目标桥接方法所在类的父类,则根据目标实际方法所在类的第二字节码文件,确定第二字节码文件包括的方法信息,遍历第二字节码文件包括的方法信息,得到目标实际方法的相关信息。根据目标实际方法所在类的第二字节码文件,确定第二字节码文件包括的方法信息时,例如可通过加载目标实际方法所在类的第二字节码文件,解析第二字节码文件包括的方法,得到第二字节码文件包括的方法信息得到。

此外,通过目标桥接方法查找到目标实际方法后,当程序运行过程中,为方便快速地再次根据目标桥接方法查找到目标实际方法时,可将目标桥接方法的相关信息和目标实际方法的相关信息对应缓存,而无需重新执行上述通过目标桥接方法查找目标实际方法的步骤,进一步提升查找目标实际方法的效率。

在本公开的示例性实施例中,在目标程序运行过程中,响应于获取到目标桥接方法,且目标桥接方法满足需要根据目标桥接方法查找到目标实际方法时,根据目标桥接方法所在类的第一字节码文件,可查询得到目标桥接方法的属性表,根据目标桥接方法属性表中包括的目标指令,可直接获取到与目标桥接方法对应的目标实际方法的相关信息,查找目标实际方法耗时短,且不管目标桥接方法和目标实际方法之间的继承关系多复杂,包括目标实际方法的类中的方法数量有多么众多,查找目标实际方法的耗时都不会增长,查找效率高。

本公开对以下结合桥接方法查找实际方法的应用场景,对本公开的信息处理方法进行详细说明。

图2是根据一示例性实施例示出的一种信息处理方法的流程图,如图2所示,信息处理方法,包括以下步骤。

在步骤s21中,在所述目标程序运行过程中,扫描携带注解信息的方法,当扫描到的携带注解信息的方法为桥接方法时,确定获取到满足预设条件的目标桥接方法。

本公开中,目标程序可以是java程序,注解信息例如可以是包括需要缓存参数的参数名。在目标程序运行过程中,由于带有注解信息的方法意味着需要对该方法中与注解信息匹配的参数进行缓存,而在目标程序运行过程中,扫描到的方法是桥接方法时,需要根据桥接方法找到桥接方法的实际方法,再根据查找到的实际方法的相关属性,执行对与注解信息匹配的参数进行缓存的操作。

进而,在目标程序运行过程中,当获取到满足预设条件的目标桥接方法,可根据目标桥接方法所在类的第一字节码文件,确定第一字节码文件包括的方法信息,以及目标桥接方法信息,并根据目标桥接方法信息中目标桥接方法的属性表,查找到属性表中包括的能够获取与目标桥接方法对应的目标实际方法的相关信息的目标指令,根据目标指令,获取得到与目标桥接方法对应的目标实际方法的相关信息。

在步骤s22中,在目标程序运行过程中,响应于获取到满足预设条件的目标桥接方法,根据目标桥接方法所在类的第一字节码文件,确定第一字节码文件包括的方法信息。

其中,第一字节码文件可以是java源代码经过编译后生成的文件,例如可以是.class文件。

在步骤s23中,遍历第一字节码文件包括的方法信息,得到目标桥接方法的相关信息,并根据目标桥接方法的相关信息,确定目标桥接方法的属性表。

其中,目标桥接方法的属性表例如可以是目标桥接方法的code属性表。

在步骤s24中,根据属性表中包括的目标指令,获取与目标桥接方法对应的目标实际方法的相关信息,其中,目标指令为指示存储目标实际方法的相关信息的指令。

其中,目标指令为invokevirtual指令。根据目标桥接方法的code属性表中invokevirtual指令指向存储目标实际方法的相关信息的索引值,即常量池中存储目标实际方法的相关信息的索引值,根据该索引值确定目标实际方法的完全限定名,根据完全限定名,确定目标实际方法的相关信息。

进而,在该应用场景中,可根据目标实际方法的相关信息,找到目标实际方法中与注解信息匹配的参数名,根据目标实际方法中与注解信息匹配的参数名,获取每次调用的参数作为缓存的关键字,进行缓存。

在本公开的示例性实施例中,在目标程序运行过程中,扫描携带注解信息的方法,当扫描到的携带注解信息的方法为桥接方法时,确定获取到满足预设条件的目标桥接方法。进而根据目标桥接方法所在类的第一字节码文件,可查询得到目标桥接方法的属性表,根据目标桥接方法属性表中包括的目标指令,可直接获取到与目标桥接方法对应的目标实际方法的相关信息,查找目标实际方法耗时短,且不管目标桥接方法和目标实际方法之间的继承关系多复杂,包括目标实际方法的类中的方法数量有多么众多,查找目标实际方法的耗时都不会增长,查找效率高。

图3是根据一示例性实施例示出的一种信息处理装置的框图300。参照图3,该装置包括第一确定模块301、第二确定模块302和获取模块303。

其中,第一确定模块301,用于在目标程序运行过程中,响应于获取到满足预设条件的目标桥接方法,根据目标桥接方法所在类的第一字节码文件,确定第一字节码文件包括的方法信息,其中,预设条件表征需要根据目标桥接方法获取与目标桥接方法对应的目标实际方法;

第二确定模块302,用于遍历第一字节码文件包括的方法信息,得到目标桥接方法的相关信息,并根据目标桥接方法的相关信息,确定目标桥接方法的属性表;

获取模块303,用于根据属性表中包括的目标指令,获取与目标桥接方法对应的目标实际方法的相关信息,其中,目标指令为指示存储目标实际方法的相关信息的指令。

可选地,第一确定模块301通过如下方式确定第一字节码文件包括的方法信息:

根据目标桥接方法所在类的第一字节码文件,加载目标桥接方法所在类的第一字节码文件;

解析第一字节码文件包括的方法,得到第一字节码文件包括的方法信息。

可选地,获取模块303通过如下方式根据属性表中包括的目标指令,获取与目标桥接方法对应的目标实际方法的相关信息:

获取由目标指令指向存储目标实际方法的相关信息的索引值;

根据索引值确定目标实际方法的完全限定名;

根据完全限定名,确定目标实际方法的相关信息。

可选地,获取模块303通过如下方式根据完全限定名,确定目标实际方法的相关信息:

根据完全限定名,确定目标实际方法所在类;

若目标实际方法所在类与目标桥接方法所在类为同一个类,则从第一字节码文件包括的方法信息中,查询得到目标实际方法的相关信息。

可选地,获取模块303还用于:

若目标实际方法所在类为目标桥接方法所在类的父类,则根据目标实际方法所在类的第二字节码文件,确定第二字节码文件包括的方法信息;

遍历第二字节码文件包括的方法信息,得到目标实际方法的相关信息。

可选地,获取模块303采用如下方式根据目标实际方法所在类的第二字节码文件,确定第二字节码文件包括的方法信息:

加载目标实际方法所在类的第二字节码文件;

解析第二字节码文件包括的方法,得到第二字节码文件包括的方法信息。

可选地,在获取模块303获取与目标桥接方法对应的目标实际方法的相关信息之后,装置还包括存储模块304;

存储模块304用于将目标桥接方法的相关信息和目标实际方法的相关信息对应缓存。

可选地,获取模块303还用于:

在目标程序运行过程中,扫描携带注解信息的方法;

当扫描到的携带注解信息的方法为桥接方法时,确定获取到满足预设条件的目标桥接方法。

可选地,目标程序为java程序;

目标桥接方法的属性表为目标桥接方法的code属性表;以及

目标指令为invokevirtual指令。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图4是根据一示例性实施例示出的一种电子设备700的框图。如图4所示,该电子设备700可以包括:处理器701,存储器702。该电子设备700还可以包括多媒体组件703,输入/输出(i/o)接口704,以及通信组件705中的一者或多者。

其中,处理器701用于控制该电子设备700的整体操作,以完成上述的信息处理方法中的全部或部分步骤。存储器702用于存储各种类型的数据以支持在该电子设备700的操作,这些数据例如可以包括用于在该电子设备700上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件703可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器702或通过通信组件705发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口704为处理器701和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件705用于该电子设备700与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g、4g、nb-iot、emtc、或其他5g等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件705可以包括:wi-fi模块,蓝牙模块,nfc模块等等。

在一示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的信息处理方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的信息处理方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器702,上述程序指令可由电子设备700的处理器701执行以完成上述的信息处理方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的信息处理方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1932,上述程序指令可由电子设备1900的处理器1922执行以完成上述的信息处理方法。

在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的信息处理方法的代码部分。

以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。

此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

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