接口调用方法和系统、存储介质和计算机设备与流程

文档序号:14728967发布日期:2018-06-19 15:50阅读:143来源:国知局

本发明涉及计算机软件技术领域,特别是涉及一种接口调用方法和系统、存储介质和计算机设备。



背景技术:

在计算机语言中,组件Bean可以看做是可用的对象,对象就是实例化的类。一个对象中包括很多方法,每个方法可以看做一个接口。例如,在设备管理Bean中,包括新增、删除和修改设备的方法,这三个方法就是三个接口。

Bean中的接口可以被调用,然而,发明人发现,传统的调用方式复杂度较高。例如,对于HTTP(HyperText Transfer Protocol,超文本传输协议)接口,可以使用类似POST MAN的工具,构造出HTTP参数,再进行发送,才能调用到具体执行业务的方法,需要构造出header、body等HTTP请求参数。又例如,对于Dubbo接口,则只能通过创建客户端、启动项目来模拟调用接口。

综上所述,传统的接口调用方法复杂度较高。



技术实现要素:

基于此,有必要针对传统的接口调用方法复杂度较高的问题,提供一种接口调用方法和系统、存储介质和计算机设备。

一种接口调用方法,包括以下步骤:

在服务器上运行注入代码,获取各个组件;

通过插件从所述组件中确定当前调用的目标组件,并通过所述插件确定所述目标组件的调用方法,将所述调用方法和目标组件发送至所述服务器;

在服务器上利用所述调用方法对所述目标组件的接口进行调用。

一种接口调用系统,包括:

运行模块,用于在服务器上运行注入代码,获取各个组件;

第一发送模块,用于通过插件从所述各个组件中确定当前调用的目标组件,并通过所述插件确定所述目标组件的调用方法,将所述调用方法和目标组件发送至所述服务器;

调用模块,用于在服务器上利用所述调用方法对所述目标组件的接口进行调用。

一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的接口调用方法。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述的接口调用方法。

上述接口调用方法和系统、存储介质和计算机设备,通过运行注入代码,获取各个组件,再通过插件确定目标组件及其调用方法,最后在服务器上利用调用方法对目标组件的接口进行调用,无需构造参数或创建客户端等复杂操作,降低了接口调用方式的复杂度。

附图说明

图1为一个实施例的接口调用方法流程图;

图2为一个实施例的接口调用系统的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明实施例提供一种接口调用方法,可包括以下步骤:

S1,在服务器上运行注入代码,获取各个组件;

S2,通过插件从所述组件中确定当前调用的目标组件,并通过所述插件确定所述目标组件的调用方法,将所述调用方法和目标组件发送至所述服务器;

S3,在服务器上利用所述调用方法对所述目标组件的接口进行调用。

本发明实施例中所述的组件可以是Bean。Bean可以看做是可用的对象,可由Spring框架进行管理。对象就是实例化的类,类简单理解就是一个模板,对象就是根据这个模板创建出来的,有自己的变量。这个对象里面有很多方法,每个方法其实就是一个接口,例如,设备管理Bean,里面有新增、删除和修改设备的方法,这三个方法就是三个接口。调用接口实际上就是调用某个Bean上面的方法。在传统的调用方法中,可通过postman等工具调用接口。postman等工具可以有图像化界面去让用户输入参数,然后这些工具再去和服务器做连接调用Bean上面的方法。dubbo的接口目前没有图形化界面,所以要构造出客户端再去连接服务器去调用接口。http接口与dubbo不同在于和服务器连接方式和通讯的协议不一样,但经过框架的转换本质上也是调用了某个对象上面的方法,只是调用的方式不一样。传统的调用方式复杂度较高。

也可以通过单元测试去调用这些方法,但是单元测试需要每次都去初始化容器,相当于启动一次项目。项目越来越大,初始化的东西越来越多,调用速度就会越来越慢。

本发明通过运行注入代码,获取各个组件,再通过插件确定目标组件及其调用方法,最后在服务器上利用调用方法对目标组件的接口进行调用,无需构造参数或创建客户端等复杂操作,降低了接口调用方式的复杂度。

在调用一个Bean的方法之前,首先需要获取到所有的Bean对象,才有可能进行调用。Spring提供了静态方法去获取到所有的Bean,获取到这些Bean后,只要再加上调用的方法(包括方法名),就能去调用并测试这个方法(假设这个方法是没有参数的)。在步骤S1中,可以通过在服务器上运行注入代码,获取各个组件。注入代码能拿到所有Bean,并接受到一次请求(请求带有调用的方法),从而能够调用Bean的方法。为了无侵入式地修改代码,可采用java agent的方式,这种方式能在项目启动前执行指定jar包的代码(即注入代码),并且能对原有代码进行修改和获取到项目的资源(包括上面说到的所有Bean)。

插件的一个作用就是需要自动在项目启动前加上一个启动参数。在一个实施例中,启动参数可以包括端口号,形式为:-javaagent:注入代码.jar端口号。端口号是jar包的一个参数,随机生成一个可用的端口号传给注入代码,注入代码才能进行真正调用起来。传端口号就是为了注入代码能根据这个端口号去启动一个本地的socket服务器。插件能根据这个端口号去和注入代码通讯,发送插件获取到的光标所在的类和调用方法给注入代码。注入代码接受到信息之后就可以根据这些信息去调用这些方法。因此,在步骤S1之前,可以通过插件生成启动参数;将所述启动参数发送至注入代码,使所述注入代码根据所述启动参数启动服务器。

通过-javaagent可以让程序在启动前运行jar包里面的代码。这段代码可以间接拿到项目的资源(包括Bean等)。jar包里面的代码会去修改关键地方的代码,以spring框架中初始化所有的bean的方法为例,该方法执行完代表所有Bean都初始完了,而通过jar包代码会在这个方法的返回之前加入saveBean方法,传的参数就是初始化成功之后的Bean资源(因为这个初始化方法是初始化bean的,因此变量里面会有bean的信息)。而saveBean这个方法的实现也是在jar包那里的。也就是说这个jar不会在项目启动前去拿bean信息,而是在项目初始化过程中,spring初始化完Bean后自动调用了saveBean方法,然后saveBean方法再将Bean保存起来,后面就可以使用了。

在步骤S2中,注入代码执行后,还需要对其进行触发,告诉注入代码要调用的组件和方法他才能去调用。这时候可以采用IntelliJ IDEA的插件技术,通过插件可以获取到当前调用的目标组件,以及所述目标组件的调用方法,并,将所述调用方法和目标组件发送至所述服务器。进一步地,在步骤S2中,可以根据所述启动参数将所述调用方法和目标组件发送至所述服务器。在一个实施例中,通过插件可以获取到编辑器光标所在的类和调用方法,并根据编辑器光标所在的类确定当前调用的目标组件。

IntelliJ IDEA就是一个编辑器,但实际使用时并不限于这个编辑器,大部分智能编辑器,如eclipse等都支持通过编辑插件来提升效率的功能。插件就是编辑器的某个功能,编辑器大部分功能都是由各种各样的插件组成。这些编辑器会提供各种各样的接口,例如获取当前项目名,获取某个文件内容。获取光标所在方法这个也是编辑器提供的接口,只要根据编辑器的插件开发规范就能开发出来,并调用编辑器提供的接口去获取到光标所在的方法和类。

在步骤S3中,为了加快调用进度,可以在所述服务器上通过热部署工具,并根据所述调用方法对所述目标组件的接口进行调用。热部署工具包括Spring-loaded,Jrebel等,热部署工具的作用是修改一个组件后可以很快生效而不需要重新启动项目。配合这些工具的使用能随时修改方法中的参数去调用方法。

例如bean里面包括int add(int a,int b)方法,该方法的作用是将两个值相加,当需要测试这个方法时,可以新增一个测试方法去测试add:

void addTest(){

add(1,2);

}

通过热部署工具这个addTest方法能马上能生效,然后就能把编辑器的光标置于addTest方法中,再去触发插件去发送请求到agent去调用addTest方法,addTest方法会调用add方法,所以其实就是在测试add方法。

如果要测试其他参数(例如,参数为1000和2000),只需要改成:

void addTest(){

add(1000,2000);

}

再通过热部署使方法生效,就能测试其他参数。

在上述实施例中,插件的作用包括以下几点:

(1)随机生成一个可用端口号,在项目启动的时候加上启动参数-javaagent:注入代码.jar端口号,使得注入代码生效。

(2)获取到光标所在的类和方法,通过socket的方式传给注入代码。

注入代码的作用包括以下几点:

(1)在项目启动的时候拿到所有的Bean(通过在Spring源码中插入自己的代码)。

(2)根据端口号启动socket服务器.

(3)根据socket服务器接收到的信息(类和方法)进行方法调用。

下面以一个实际应用的例子详细说明本发明的技术方案。

假如目前项目有一个Bean为public class AuthService,作用是对login方法进行调用,该Bean中可包括一个方法public void login(String username,String password),上述方法中可包括执行登录的业务代码。

1、这时候可以构造一个测试方法,即在public class AuthService中,public void login(String username,String password)之前加入public void testLogin(),测试方法用于执行login(“xiaoming”,“123456”);可通过鼠标点击login(“xiaoming”,“123456”)末尾,则光标会出现在鼠标点击处。

2、使用热部署工具使testLogin方法快速生效

3、按快捷键调用插件的方法。获取到光标所在点是在AuthService类,testLogin方法,并把这些信息通过socket发送给注入代码。

4、注入代码拿到后就会去根据自己初始化时拿到的所有Bean进行匹配,找到对应Bean后再根据方法名进行反射调用,调用testLogin方法。

本发明结合javaagent,IntelliJ IDEA插件开发和热部署工具,充分发挥了这三个技术的优点:

(1)代码无侵入(不需要改代码,启动时会自动加载指定jar包)。

(2)快速找到类和方法(不用手动输类和方法去执行)。

(3)快速添加测试方法,修改测试方法参数。

代码上只要只用了Spring(目前非常流行的开发框架),即可使用,随时调用一些需要依赖外部触发的方法,包括RPC(Remote Procedure Call,远程过程调用)的方法、HTTP服务实现方法、Dao层的方法等等。

如图2所示,本发明实施例还提供一种接口调用系统,可包括:

运行模块10,用于在服务器上运行注入代码,获取各个组件;

第一发送模块20,用于通过插件从所述各个组件中确定当前调用的目标组件,并通过所述插件确定所述目标组件的调用方法,将所述调用方法和目标组件发送至所述服务器;

调用模块30,用于在服务器上利用所述调用方法对所述目标组件的接口进行调用。

本发明的接口调用系统与本发明的接口调用方法一一对应,在上述接口调用方法的实施例阐述的技术特征及其有益效果均适用于接口调用系统的实施例中,特此声明。

在一个实施例中,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任意实施例所述的接口调用方法。

在一个实施例中,本发明还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行上述任意实施例所述的接口调用方法。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。

计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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