接口编码方法、服务器及计算机可读存储介质与流程

文档序号:19064376发布日期:2019-11-06 02:09阅读:208来源:国知局
接口编码方法、服务器及计算机可读存储介质与流程

本发明涉及开发技术领域,尤其涉及一种接口编码方法、服务器及计算机可读存储介质。



背景技术:

目前,很多系统项目是基于spring框架的工程,并且现在都是微服务以restfulapi接口方式提供服务,而每个接口对应一个controller(控制器),每个controller都要处理接口入参有效性校验、调service方法、service方法返回数据封装正常返回报文、捕捉异常对异常处理成失败返回报文、打印接口请求和返回日志。这几个逻辑里只有调service方法是不同的,其他的代码是一模一样的。现有的编码方法是在每个controller中都要写所有代码,那么就造成了大量的冗余代码,而且程序员写起来也挺麻烦、费时的。



技术实现要素:

有鉴于此,本发明提出一种接口编码方法、服务器及计算机可读存储介质,以解决如何减少接口代码冗余的问题。

首先,为实现上述目的,本发明提出一种接口编码方法,该方法包括步骤:

采用面向切面编程aop技术创建spring切面,将每个接口对应的相同代码设置在所述切面中;

当接收到交易请求后,在所述切面拦截所有接口需要执行的方法;

针对所拦截的方法对应的接口进行接口入参有效性校验和签名校验,如果所述接口入参有效性校验或所述签名校验不通过,则直接返回错误数据;

当所述接口入参有效性校验和签名校验均通过后,执行被拦截的方法;及

对被拦截的方法进行异常捕捉并返回报文。

可选地,该方法在创建所述切面之前还包括步骤:

定义spring注解,针对需要被拦截的接口方法添加所述注解。

可选地,该方法在创建所述切面之后还包括步骤:

将所述切面的切点设置为所创建的所述注解,以使所述切面对添加有所述注解的方法进行拦截,而对未添加所述注解的方法不进行拦截,由相应的接口控制器自行处理。

可选地,所述接口入参有效性校验包括为每个接口的入参建立一个实体类,利用spring的验证字段数据注解,给每个字段加上需要检验的注解,然后在所述切面中调用一个验证的方法对所有字段的不同注解做对应的校验;

所述签名校验包括针对交易请求方对调用接口上送的数据所做的签名进行验证,以确认所述交易没有被篡改。

可选地,所述执行被拦截的方法的步骤包括:

由所述切面主动调用被拦截的方法,包括在对应接口中执行调service方法。

此外,为实现上述目的,本发明还提供一种服务器,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的接口编码系统,所述接口编码系统被所述处理器执行时实现如下步骤:

采用面向切面编程aop技术创建spring切面,将每个接口对应的相同代码设置在所述切面中;

当接收到交易请求后,在所述切面拦截所有接口需要执行的方法;

针对所拦截的方法对应的接口进行接口入参有效性校验和签名校验,如果所述接口入参有效性校验或所述签名校验不通过,则直接返回错误数据;

当所述接口入参有效性校验和签名校验均通过后,执行被拦截的方法;

对被拦截的方法进行异常捕捉并返回报文。

可选地,所述接口编码系统被所述处理器执行时还实现步骤:

在创建所述切面之前,定义spring注解,针对需要被拦截的接口方法添加所述注解;

在创建所述切面之后,将所述切面的切点设置为所创建的所述注解,以使所述切面对添加有所述注解的方法进行拦截,而对未添加所述注解的方法不进行拦截,由相应的接口控制器自行处理。

可选地,所述接口入参有效性校验包括为每个接口的入参建立一个实体类,利用spring的验证字段数据注解,给每个字段加上需要检验的注解,然后在所述切面中调用一个验证的方法对所有字段的不同注解做对应的校验;

所述签名校验包括针对交易请求方对调用接口上送的数据所做的签名进行验证,以确认所述交易没有被篡改。

可选地,所述执行被拦截的方法的步骤包括:

由所述切面主动调用被拦截的方法,包括在对应接口中执行调service方法。

进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有接口编码系统,所述接口编码系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的接口编码方法的步骤。

相较于现有技术,本发明所提出的接口编码方法、服务器及计算机可读存储介质,可以通过spring的切面技术,将每个接口controller中所有相同的代码搬到切面中,因此,签名校验、接口入参验证、日志打印、返回报文处理等代码只要写一次,后续所有的controller方法不用再重复写这些代码,大大的增强了程序员的编码效率,减少了代码的冗余。

附图说明

图1是本发明服务器一可选的硬件架构的示意图;

图2是本发明接口编码系统第一实施例的程序模块示意图;

图3是本发明接口编码系统第二实施例的程序模块示意图;

图4是本发明接口编码方法第一实施例的流程示意图;

图5是本发明接口编码方法第二实施例的流程示意图;

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

参阅图1所示,是本发明服务器2一可选的硬件架构的示意图。

本实施例中,所述服务器2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的服务器2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

其中,所述服务器2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,该服务器2可以是独立的服务器,也可以是多个服务器所组成的服务器集群。

所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述服务器2的内部存储单元,例如该服务器2的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述服务器2的外部存储设备,例如该服务器2上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。当然,所述存储器11还可以既包括所述服务器2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述服务器2的操作系统和各类应用软件,例如接口编码系统200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。

所述处理器12在一些实施例中可以是中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述服务器2的总体操作。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述的接口编码系统200等。

所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述服务器2与其他电子设备之间建立通信连接。

至此,己经详细介绍了本发明相关设备的硬件结构和功能。下面,将基于上述介绍提出本发明的各个实施例。

首先,本发明提出一种接口编码系统200。

参阅图2所示,是本发明接口编码系统200第一实施例的程序模块图。

本实施例中,所述接口编码系统200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明各实施例的接口编码操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,接口编码系统200可以被划分为一个或多个模块。例如,在图2中,所述接口编码系统200可以被分割成创建模块201、拦截模块202、校验模块203、执行模块204、反馈模块205。其中:

所述创建模块201,用于创建spring切面,将每个接口对应的相同代码设置在所述切面中。

具体地,针对所有spring框架的微服务接口,为了简化代码,可以添加切面来拦截每个controller接口的方法。在本实施例中,利用spring的aop(aspectorientedprogramming,面向切面编程)技术,创建一个切面拦截所有的controller接口的方法,将每个controller中所有相同的代码搬到切面中,例如打印日志、接口入参有效性校验、签名校验、对service方法返回数据封装成接口返回报文、异常捕获并处理失败返回报文等。加上切面拦截处理后,所有的controller就只要做一件事:调service方法。

所述拦截模块202,用于当接收到交易请求后,在切面拦截所有的controller接口需要执行的方法。

具体地,当交易请求到服务端,交易的controller接口需要执行接口入参有效性校验、调service方法、对service方法返回数据封装正常返回报文、捕捉异常对异常处理成失败返回报文、打印接口请求和返回日志等流程。在该controller接口执行该交易的方法前会被切面拦截,先执行切面里的代码,然后再执行被拦截的方法(切面主动调用被拦截的方法,例如调service方法),也就是说controller接口中执行的方法是由切面控制调用的,最后由切面组装公共的返回报文进行返回。这样一来就把所有controller方法中相同的代码抽离出来了,简化了controller的代码冗余。

所述校验模块203,用于针对所拦截的方法对应的接口进行接口入参有效性校验和签名校验,如果接口入参有效性校验或签名校验不通过,则直接返回错误数据。

具体地,在执行所拦截的方法之前,首先进行接口入参有效性校验、签名校验。如果这两种校验有不通过的情况,则直接返回错误数据,不再继续执行被拦截的方法。

所述接口入参有效性校验是指每个接口都有入参,所以为每个接口的入参建立一个实体类,然后利用spring的验证字段数据注解,给每个字段加上需要检验的注解,然后在切面中调用一个验证的方法就可以对所有字段的不同注解做对应的校验,这个验证的方法是各种验证注解做对应的逻辑判断。

另外,服务提供的接口为了安全必须要签名校验,例如md5验签。请求方对调用接口上送的数据做签名,服务方验证签名以确认交易没有被篡改,签名校验对所有的接口来说是公共处理的,不需要每个接口都写一遍,所以可以在切面中执行。

所述执行模块204,用于当接口入参有效性校验和签名校验均通过后,执行被拦截的方法。

具体地,当所述校验通过后,执行被拦截的方法的代码,进行相应的处理。在本实施例中,由切面主动调用被拦截的方法,例如调service方法,该方法在controller接口中执行。

所述反馈模块205,用于对被拦截的方法进行异常捕捉并返回报文。

具体地,在所述被拦截的方法执行过程中,所述切面对整个方法执行体进行异常捕捉,就是java中的try、catch,如果捕捉到异常,就将异常错误码转换成报文体返回给调用者,调用者根据返回的错误码来识别是什么错误。如果没有异常,那就是正常流程,将接口处理后的数据组装成报文体返回给调用者,调用者这个时候判断到的错误码是成功的,按成功逻辑处理。

本实施例提供的接口编码系统,可以通过spring的切面技术,将每个controller中所有相同的代码搬到切面中,因此,签名校验、接口入参验证、日志打印、返回报文处理等代码只要写一次,后续所有的controller方法不用再重复写这些代码,大大的增强了程序员的编码效率,减少了代码的冗余。

参阅图3所示,是本发明接口编码系统200第二实施例的程序模块图。本实施例中,所述的接口编码系统200除了包括第一实施例中的所述创建模块201、拦截模块202、校验模块203、执行模块204、反馈模块205之外,还包括添加模块206。

所述添加模块206,用于定义spring注解,针对需要被拦截的controller方法添加所述注解。

具体地,针对所有spring框架的微服务接口,为了简化代码,可以添加切面来拦截每个controller接口的方法。如果有需求,有的controller需要特殊处理的,不需要被切面拦截。因此,可以自定义一个spring注解,定义后可以在方法或者类上使用,将所述切面的切点设置为添加有该注解的方法,这样需要被拦截的方法添加该注解,而不需要被拦截的方法不添加该注解即可。

例如,所述注解具体定义为:

public@interfacevalidateandsign{}

通过@interface来定义,那么注解名就是validateandsign。

使用的时候在某个方法上添加:@validateandsign,则表示该方法需要被切面拦截。

所述创建模块201,还用于在创建spring切面后,将所述切面的切点设置为所创建的所述注解。

具体地,所述切面的切点设置为所述注解,也就是所述切面对添加有所述注解的方法进行拦截,而对未添加所述注解的方法不进行拦截,由相应的controller自行处理。

本实施例提供的接口编码系统,可以通过spring的切面技术,将每个controller中所有相同的代码搬到切面中,因此,签名校验、接口入参验证、日志打印、返回报文处理等代码只要写一次,后续所有的controller方法不用再重复写这些代码,大大的增强了程序员的编码效率,减少了代码的冗余。另外,切面可以根据每个controller的方法是否添加注解,判断该方法是否需要被拦截,以备有的controller需要特殊处理。

此外,本发明还提出一种接口编码方法。

参阅图4所示,是本发明接口编码方法第一实施例的流程示意图。在本实施例中,根据不同的需求,图4所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。

该方法包括以下步骤:

步骤s400,创建spring切面,将每个接口对应的相同代码设置在所述切面中。

具体地,针对所有spring框架的微服务接口,为了简化代码,可以添加切面来拦截每个controller接口的方法。在本实施例中,利用spring的aop技术,创建一个切面拦截所有的controller接口的方法,将每个controller中所有相同的代码搬到切面中,例如打印日志、接口入参有效性校验、签名校验、对service方法返回数据封装成接口返回报文、异常捕获并处理失败返回报文等。加上切面拦截处理后,所有的controller就只要做一件事:调service方法。

步骤s402,当接收到交易请求后,在切面拦截所有的controller接口需要执行的方法。

具体地,当交易请求到服务端,交易的controller接口需要执行接口入参有效性校验、调service方法、对service方法返回数据封装正常返回报文、捕捉异常对异常处理成失败返回报文、打印接口请求和返回日志等流程。在该controller接口执行该交易的方法前会被切面拦截,先执行切面里的代码,然后再执行被拦截的方法(切面主动调用被拦截的方法,例如调service方法),也就是说controller接口中执行的方法是由切面控制调用的,最后由切面组装公共的返回报文进行返回。这样一来就把所有controller方法中相同的代码抽离出来了,简化了controller的代码冗余。

步骤s404,针对所拦截的方法对应的接口进行接口入参有效性校验和签名校验,如果接口入参有效性校验或签名校验不通过,则直接返回错误数据。

具体地,在执行所拦截的方法之前,首先进行接口入参有效性校验、签名校验。如果这两种校验有不通过的情况,则直接返回错误数据,不再继续执行被拦截的方法。

所述接口入参有效性校验是指每个接口都有入参,所以为每个接口的入参建立一个实体类,然后利用spring的验证字段数据注解,给每个字段加上需要检验的注解,然后在切面中调用一个验证的方法就可以对所有字段的不同注解做对应的校验,这个验证的方法是各种验证注解做对应的逻辑判断。

另外,服务提供的接口为了安全必须要签名校验,例如md5验签。请求方对调用接口上送的数据做签名,服务方验证签名以确认交易没有被篡改,签名校验对所有的接口来说是公共处理的,不需要每个接口都写一遍,所以可以在切面中执行。

步骤s406,当接口入参有效性校验和签名校验均通过后,执行被拦截的方法。

具体地,当所述校验通过后,执行被拦截的方法的代码,进行相应的处理。在本实施例中,由切面主动调用被拦截的方法,例如调service方法,该方法在controller接口中执行。

步骤s408,对被拦截的方法进行异常捕捉并返回报文。

具体地,在所述被拦截的方法执行过程中,所述切面对整个方法执行体进行异常捕捉,就是java中的try、catch,如果捕捉到异常,就将异常错误码转换成报文体返回给调用者,调用者根据返回的错误码来识别是什么错误。如果没有异常,那就是正常流程,将接口处理后的数据组装成报文体返回给调用者,调用者这个时候判断到的错误码是成功的,按成功逻辑处理。

本实施例提供的接口编码方法,可以通过spring的切面技术,将每个controller中所有相同的代码搬到切面中,因此,签名校验、接口入参验证、日志打印、返回报文处理等代码只要写一次,后续所有的controller方法不用再重复写这些代码,大大的增强了程序员的编码效率,减少了代码的冗余。

如图5所示,是本发明接口编码方法的第二实施例的流程示意图。在本实施例中,根据不同的需求,图5所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。

该方法包括以下步骤:

步骤s500,定义spring注解,针对需要被拦截的controller方法添加所述注解。

具体地,针对所有spring框架的微服务接口,为了简化代码,可以添加切面来拦截每个controller的方法。如果有需求,有的controller需要特殊处理的,不需要被切面拦截。因此,可以自定义一个spring注解,定义后可以在方法或者类上使用,将所述切面的切点设置为添加有该注解的方法,这样需要被拦截的方法添加该注解,而不需要被拦截的方法不添加该注解即可。

例如,所述注解具体定义为:

public@interfacevalidateandsign{}

通过@interface来定义,那么注解名就是validateandsign。

使用的时候在某个方法上添加:@validateandsign,则表示该方法需要被切面拦截。

步骤s502,创建spring切面,将所述切面的切点设置为所创建的所述注解。

具体地,利用spring的aop技术,创建一个切面拦截所有的controller接口的方法,将每个controller中所有相同的代码搬到切面中,例如打印日志、接口入参有效性校验、签名校验、对service方法返回数据封装成接口返回报文、异常捕获并处理失败返回报文等。加上切面拦截处理后,所有的controller就只要做一件事:调service方法。

所述切面的切点设置为所述注解,也就是所述切面对添加有所述注解的方法进行拦截,而对未添加所述注解的方法不进行拦截,由相应的controller自行处理。

步骤s504,当接收到交易请求后,在切面拦截所有的controller接口需要执行的方法。

具体地,当交易请求到服务端,交易的controller接口需要执行接口入参有效性校验、调service方法、对service方法返回数据封装正常返回报文、捕捉异常对异常处理成失败返回报文、打印接口请求和返回日志等流程。在该controller接口执行该交易的方法前会被切面拦截(添加有所述注解的方法),先执行切面里的代码,然后再执行被拦截的方法(切面主动调用被拦截的方法,例如调service方法),也就是说controller接口中执行的方法是由切面控制调用的,最后由切面组装公共的返回报文进行返回。这样一来就把所有controller方法中相同的代码抽离出来了,简化了controller的代码冗余。

步骤s506,针对所拦截的方法对应的接口进行接口入参有效性校验和签名校验,如果接口入参有效性校验或签名校验不通过,则直接返回错误数据。

具体地,在执行所拦截的方法之前,首先进行接口入参有效性校验、签名校验。如果这两种校验有不通过的情况,则直接返回错误数据,不再继续执行被拦截的方法。

所述接口入参有效性校验是指每个接口都有入参,所以为每个接口的入参建立一个实体类,然后利用spring的验证字段数据注解,给每个字段加上需要检验的注解,然后在切面中调用一个验证的方法就可以对所有字段的不同注解做对应的校验,这个验证的方法是各种验证注解做对应的逻辑判断。

另外,服务提供的接口为了安全必须要签名校验,例如md5验签。请求方对调用接口上送的数据做签名,服务方验证签名以确认交易没有被篡改,签名校验对所有的接口来说是公共处理的,不需要每个接口都写一遍,所以可以在切面中执行。

步骤s508,当接口入参有效性校验和签名校验均通过后,执行被拦截的方法。

具体地,当所述校验通过后,执行被拦截的方法的代码,进行相应的处理。在本实施例中,由切面主动调用被拦截的方法,例如调service方法,该方法在controller接口中执行。

步骤s510,对被拦截的方法进行异常捕捉并返回报文。

具体地,在所述被拦截的方法执行过程中,所述切面对整个方法执行体进行异常捕捉,就是java中的try、catch,如果捕捉到异常,就将异常错误码转换成报文体返回给调用者,调用者根据返回的错误码来识别是什么错误。如果没有异常,那就是正常流程,将接口处理后的数据组装成报文体返回给调用者,调用者这个时候判断到的错误码是成功的,按成功逻辑处理。

本实施例提供的接口编码方法,可以通过spring的切面技术,将每个controller中所有相同的代码搬到切面中,因此,签名校验、接口入参验证、日志打印、返回报文处理等代码只要写一次,后续所有的controller方法不用再重复写这些代码,大大的增强了程序员的编码效率,减少了代码的冗余。另外,切面可以根据每个controller的方法是否添加注解,判断该方法是否需要被拦截,以备有的controller需要特殊处理。

本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有接口编码程序,所述接口编码程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的接口编码方法的步骤。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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