CN114721713A - 基于注解的数据处理方法、计算机设备以及可读存储介质 - Google Patents

基于注解的数据处理方法、计算机设备以及可读存储介质 Download PDF

Info

Publication number
CN114721713A
CN114721713A CN202110005012.3A CN202110005012A CN114721713A CN 114721713 A CN114721713 A CN 114721713A CN 202110005012 A CN202110005012 A CN 202110005012A CN 114721713 A CN114721713 A CN 114721713A
Authority
CN
China
Prior art keywords
target
service
annotation
file
component
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110005012.3A
Other languages
English (en)
Inventor
杨萧玉
徐旭栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110005012.3A priority Critical patent/CN114721713A/zh
Publication of CN114721713A publication Critical patent/CN114721713A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种基于注解的数据处理方法、计算机设备以及可读存储介质,该基于注解的数据处理方法包括:调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。采用本申请,可以提升开发效率,对计算机技术领域中实现组件治理、为多种应用提供“端云一体”的组件生态系统具有重要作用。

Description

基于注解的数据处理方法、计算机设备以及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于注解的数据处理方法、计算机设备以及可读存储介质。
背景技术
随着移动互联网的普及,应用程序(尤其是移动端应用程序)给人们的生活带来了极大的便利,现有的应用程序持续更新以及新的应用程序出现,可以满足人们的多样化需求,其中,应用程序可以通过集成多个具有不同功能的组件来实现本身所需的业务功能。
在现有的应用程序开发场景中,组件的本质是一个可以被复用的封装体,因此一个组件可以被多个应用程序进行集成复用,然而,当多个应用程序集成同一个组件时,应用开发人员需要手动地对该组件所提供的服务进行多次重复描述,造成应用程序的开发效率过低。
发明内容
本申请实施例提供了一种基于注解的数据处理方法、计算机设备以及可读存储介质,可以提升开发效率。
本申请实施例一方面提供了一种基于注解的数据处理方法,包括:
调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;
当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。
本申请实施例一方面提供了一种基于注解的数据处理装置,包括:
描述文件生成模块,用于调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;
代码生成模块,用于当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
框架调用模块,用于当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。
其中,所述描述文件生成模块包括:
第一生成单元,用于调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,根据所述头文件中的所述目标注解以及与所述目标注解相关联的组件代码生成第一抽象语法树;所述头文件包括目标组件的组件代码;所述第一抽象语法树包括与所述目标注解对应的初始服务信息;
第二生成单元,用于根据所述第一抽象语法树中的初始服务信息生成第二抽象语法树;
第三生成单元,用于根据所述第二抽象语法树生成用于描述所述目标组件提供的开放服务的目标服务信息,将所述目标服务信息存储至服务描述文件。
其中,所述第一生成单元包括:
查找子单元,用于调用命令行工具在文件夹中进行查找,获取所述文件夹中的头文件;所述头文件包括基于所述组件代码所编写的类的声明;
遍历子单元,用于对所述头文件进行遍历,当遍历到所述头文件中存在注解关键字时,确定所述头文件中存在目标注解,将存在所述目标注解的头文件确定为目标头文件;
解析子单元,用于对所述目标头文件中的所述目标注解以及与所述目标注解相关联的组件代码进行解析,生成第一抽象语法树。
其中,所述第二生成单元包括:
提取子单元,用于对所述第一抽象语法树进行遍历;当在所述第一抽象语法树中遍历到注解关键字时,根据所述目标注解与所述组件代码之间的关联关系,从所述第一抽象语法树中提取与所述注解关键字相关的数据,作为初始服务信息;
转换子单元,用于按照标准数据格式对所述初始服务信息进行格式转换,得到第二抽象语法树。
其中,所述描述文件生成模块包括:
拆分单元,用于调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,对所述头文件进行拆分,得到N个拆分头文件;N为大于1的整数;
并行处理单元,用于并行处理所述N个拆分头文件,得到共同用于描述目标组件提供的开放服务的N组子目标服务信息,将所述N组子目标服务信息分别存储至N个子服务描述文件;
组合单元,用于对所述N个子服务描述文件进行组合,得到所述头文件对应的服务描述文件。
其中,所述代码生成模块包括:
文件获取单元,用于当所述目标组件被集成到应用工程时,调用所述命令行工具获取与所述目标组件对应的所述服务描述文件以及所述应用工程中的应用描述文件;
合并单元,用于将所述服务描述文件以及所述应用描述文件合并为资源锁定文件;所述资源锁定文件包括所述服务描述文件中的所述目标服务信息;
代码转换单元,用于将所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中。
其中,所述代码转换单元具体用于:
调用所述命令行工具将所述资源锁定文件中的所述目标服务信息转换成与所述组件代码具有相同语言类型的服务代码,将所述服务代码保存至代码文件;所述语言类型为扩充的面向对象编程语言类型;将所述代码文件集成到所述应用工程中;所述应用工程为扩充的面向对象编程语言框架下的应用工程。
其中,所述目标注解为所述目标头文件中按注解协议编写的代码;
所述装置还包括:
注解模块,用于当所述目标注解中包括所述注解关键字,且所述目标注解编写在所述目标头文件对类的声明中,且所述目标注解编写在对应的声明之前时,确定所述目标注解满足所述注解协议;或者,用于当所述目标注解包括注解参数,且所述目标注解用于对所述开放服务进行初始化时,获取与所述目标注解相关联的初始化方法所返回的参数类型,若所返回的参数类型为服务类型,则确定所述目标注解满足所述注解协议。
本申请实施例一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信功能,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中的方法。
本申请实施例可以通过调用命令行工具获取头文件中的目标注解,并可以根据目标注解生成用于描述目标组件提供的开放服务的目标服务信息,进而可以根据目标服务信息生成服务描述文件,进一步,当目标组件被集成到应用工程时,可以将上述服务描述文件中的目标服务信息转换为服务代码,并插入到上述应用工程中,从而当该应用工程运行时,可以通过上述服务代码来调用业务框架以注册目标组件提供的开放服务。上述可知,本申请通过提供目标注解使得组件开发人员可以描述目标组件提供的开放服务,并通过调用命令行工具自动将目标注解所定义的服务信息集成到应用工程中,使得应用开发人员可以直接通过业务框架获取到上述开放服务并使用,而无需关心该开放服务的初始化流程以及依赖项,从而可以实现对组件的高效复用,且由于注册开放服务所需的服务代码由命令行工具自动生成,无需应用开发人员进行手动编写,因此可以极大地提升开发效率,同时可以提升组件开发人员和应用开发人员之间的协作效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种系统架构示意图;
图2a-图2c是本申请实施例提供的一种基于注解的数据处理的场景示意图;
图3是本申请实施例提供的一种基于注解的数据处理方法的流程示意图;
图4是本申请实施例提供的一种服务描述文件生成的原理示意图;
图5是本申请实施例提供的一种服务信息传递过程的流程示意图;
图6是本申请实施例提供的一种基于注解的数据处理装置的结构示意图;
图7是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参见图1,是本申请实施例提供的一种系统架构示意图。该系统架构可以包括服务器以及多个终端设备,如图1所示,具体可以包括服务器100、终端设备200a、终端设备200b、终端设备200c以及终端设备200d,服务器100可以通过网络与终端设备200a、终端设备200b、终端设备200c以及终端设备200d建立连接,每个终端设备均可以安装具有各种功能的应用程序(application,在移动终端中也可将application简称为App),如即时通信应用、游戏应用、视频应用、音乐应用、社交应用、购物应用、地图类应用等等,这些应用程序可以通过下载应用开发人员发布到应用市场的安装包得到。因此,每个终端设备均可以通过应用程序对应的客户端与服务器100进行数据传输,如服务器100可以向每个终端设备发送应用推荐信息流,每个终端设备都可以在相关应用程序对应的客户端中显示该应用推荐信息流,进而可以响应用户录入的一系列触发操作,通过服务器100下载所推荐应用的安装包,并在终端设备上进行安装,终端设备可以运行安装成功的应用程序,并调用对应的依赖框架来实现该应用程序的所有业务功能,例如播放视频功能、下载图片功能等。其中,应用推荐信息流可以理解为将若干消息源组合在一起的内容聚合器,可以帮助用户获取感兴趣的应用程序新动态。其中,本申请中的“应用程序”还可以称为:应用、应用软件、软件、客户端等其它名称。
其中,应用程序可以理解为能够执行某种功能的软件程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面,如上述提到的通信应用、游戏应用、视频应用等移动应用。应用程序可以利用计算机操作系统的某些服务,也可以利用其它应用程序所支持的服务。
可以理解的是,本申请提供的方法可以由计算机设备执行,计算机设备包括但不限于终端设备或服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云数据库、云服务、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能手环等)、智能电视、智能车载等可以运行应用程序的智能终端。终端设备和服务器可以通过有线或无线方式进行直接或间接地连接,本申请在此不做限制。
在一款应用正式发布前,通常需要多个岗位的开发人员互相协作,经过筹备讨论、开发、测试等一系列流程才能最终上线,下述以开发具有图片下载功能的应用程序A1为例进行具体说明。
请一并参见图2a-图2c,是本申请实施例提供的一种基于注解的数据处理的场景示意图。如图2a-图2c所示,该场景图以图1所对应实施例中的服务器100、终端设备200a、终端设备200b以及终端设备200c为例。组件开发人员可以通过终端设备200a上的开发工具来进行组件(Component)的开发,具体的,如图2a所示,可以在开发工具中采用某种程序设计语言来编写图片下载组件的源代码(或源程序),其中,源代码是未编译的、按照一定的程序设计语言规范书写的计算机语言指令,例如可以使用Objective-C语言(即扩充C的面向对象编程语言)进行编写,Objective-C语言完全兼容标准C语言,它是用C语言写成的很小的运行库,可以令应用程序的尺寸增加很小,可参见图2a中的组件源代码中的代码300b,就是用Objective-C语言编写的类的声明。此外,本申请提供的方法还支持在源代码中添加注解(或称为标注,由英文Annotation翻译而来,很多计算机语言都有这个语法概念),程序可以通过注解获取类、字段、方法等程序元素的相关信息,而在Objective-C语言中,注解可以用宏定义实现,具体可参见图2a中的组件源代码中的注解300a,该注解300a可以用来定义该源代码中的类。因此,组件源代码可以包括注解以及组件代码,组件代码是指组件源代码中除了注解以外的代码。终端设备200a可以将编写好的源代码保存在源文件中,进而可以调用命令行工具来获取目标注解,此处的目标注解是指用于描述上述图片下载组件所提供的图片下载服务的注解,用以和其它注解进行区分,进一步,命令行工具可以根据获取到的目标注解生成服务描述文件,并将该服务描述文件和图片下载组件打包在一起,通过向服务器100发送组件发布请求,将该图片下载组件发布到组件市场中。其中,命令行工具可以预先安装在终端设备200a中,且命令行工具没有用户界面,开发人员可以通过键盘输入命令,计算机系统可以根据输入的命令完成相应的工作。
如图2b所示,在开发具有图片下载功能的应用程序A1的项目中,应用开发人员可以通过终端设备200b向服务器100发送组件下载请求,服务器100接收到该请求后,可以将组件市场中的图片下载组件发送给终端设备200b,终端设备200b进而可以调用预先安装好的命令行工具,将包括图片下载组件在内的所有组件进行集成,进一步,命令行工具可以根据服务描述文件生成资源锁定文件,并将该资源锁定文件中的目标服务信息转换成服务代码,进而可以将该服务代码插入到应用工程中,在该应用程序A1对应的源代码经过编译、链接、测试等步骤后,可以将该应用程序A1打包成安装包,并通过服务器100发布到应用市场中供用户下载。如图2c所示,在相关平台审核通过后,用户可以通过终端设备200c从应用市场中下载该应用程序A1,并将其安装在终端设备200c上,当用户打开该应用程序A1后,该应用程序A1可以在终端设备200c上运行,此时,该应用程序A1可以通过上述服务代码直接调用业务框来注册图片下载组件所提供的图片下载服务,注册成功后,终端设备200c可以通过服务器100获取网络上的图片,并在用户界面进行显示,还可以响应用户针对用户界面中的保存按钮的触发操作,将用户所选择的图片保存至终端设备200c的相应存储区域中。需要说明的是,应用程序A1可以集成多个组件,本申请实施例仅以图片下载组件为例进行说明。其中,服务(Service)的本质是组件提供的对外部开放的接口(可简称API,即Application Programming Interface),组件开发人员可以将部分公开API定义为服务暴露给外部,一个组件可以暴露多个服务给外部使用。
由此可见,本申请实施例可以支持在源代码中加入目标注解,使得组件开发人员可以描述目标组件提供的开放服务,并通过调用命令行工具自动将目标注解所定义的服务信息集成到应用工程中,使得应用开发人员可以直接通过业务框架获取到上述开放服务并使用,而无需关心该开放服务的初始化流程以及依赖项,从而可以实现对组件的高效复用,且由于注册开放服务所需的服务代码由命令行工具自动生成,无需应用开发人员进行手动编写,因此可以极大地提升开发效率,同时可以提升组件开发人员和应用开发人员之间的协作效率。
请参见图3,是本申请实施例提供的一种基于注解的数据处理方法的流程示意图。如图3所示,该方法可以包括以下步骤:
步骤S101,调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;
具体的,可以调用命令行工具(也可称为CLI工具,CLI是command-line interface的缩写)在当前文件夹或其它相关文件夹下进行查找,获取该文件夹中的头文件,头文件中可以包括基于组件代码所编写的类的声明,其中,组件代码为头文件中除了注解以外的代码。例如,在组件开发人员使用Objective-C语言进行开发的场景下,主要会产生两类文件,分别是头文件和源文件(或称为源代码文件),而头文件会以“.h”作为后缀,源文件会以“.m”或“.mm”作为后缀,其中,头文件可以包括基于Objective-C语言所编写的一些类(即Class)的声明、类型的声明、函数的声明以及常数的声明等,源文件则主要可以包括头文件中已经声明的那些函数的具体实现代码,因此,命令行工具可以在当前文件夹下查找具有“.h”后缀的文件作为头文件。进一步,命令行工具可以对上述获取到的头文件进行遍历,当在该头文件中遍历到注解关键字时,则可以确定该头文件中存在目标注解,同时也可以将存在目标注解的头文件确定为目标头文件,需要说明的是,上述头文件中还可能包括其它注解,用来对某些程序元素(如类、字段、方法、变量、参数等)进行说明或注释,由于这些注解不包括注解关键字,因此在本申请实施例中会使用“目标注解”这个名称与其它注解进行区分,目标注解是指目标头文件中用来描述目标组件所提供的开放服务的代码,其中,开放服务是指目标组件暴露的开放接口。
在确定目标头文件后,命令行工具可以对目标头文件中的全部代码(包括目标注解以及组件代码)进行解析,解析的实现过程可以通过采用第三方的编译框架实现,或者,也可以采用计算机设备自带的编译框架实现,本申请实施例不作具体限定。采用编译框架,可以先对目标头文件中的所有代码进行词法分析(也可以称为扫描,scanner),具体的,命令行工具调用编译框架读取目标头文件中的代码,并将读取到的代码按照预定的规则合并为一个个的标识令牌(Tokens),同时可以移除代码中的空白符和注释等,进而整个代码会被分割进一个Tokens列表(或者说是语法片段数组,该数组为一维数组),进一步,可以进行语法分析(也称解析器),即将词法分析得到的Tokens列表转换成树形的形式,生成第一抽象语法树,第一抽象语法树包含了用于描述目标头文件的全部语法结构的数据,同时,可以将第一抽象语法树中与目标注解所对应的数据以及目标注解相关联的组件代码所对应的数据确定为初始服务信息,例如根据图2a所示的组件源代码生成的第一语法树中,与注解300a以及代码300b对应的数据即为该组件源代码对应的初始服务信息。
进一步,可以根据第一抽象语法树中的初始服务信息生成第二抽象语法树,具体的,首先可以对初始服务信息进行提取:命令行工具可以对第一抽象语法树进行遍历,当在第一抽象语法树中遍历到注解关键字时,可以根据目标头文件中的目标注解和组件代码之间的关联关系,从第一抽象语法树中提取出与上述注解关键字相关的数据即可得到初始服务信息。进而可以对提取出的初始服务信息进行格式转换,得到具有标准数据格式的第二抽象语法树,标准数据格式的具体形式可以根据开发项目方案的实际情况进行定义,本申请实施例不做限制。最终,命令行工具可以将第二抽象语法树中具有标准数据格式的数据转换为YAML格式,得到目标服务信息,从而可以生成服务描述文件,将目标服务信息存储至服务描述文件中。其中,目标服务信息与上述目标头文件中的目标注解相对应,同样可以用于描述目标组件提供的开放服务,例如可以描述某个开放服务需要实现哪种特定的协议,还可以指定该开放服务的初始化方法和属性注入等等。服务描述文件可以为YAML格式的文件,YAML是"YAML Ain't a Markup Language"(“YAML不是一种标记语言”)的递归缩写,是一种可读性高、用来表达数据序列化的格式,文件以“.yaml”或“.yml”作为后缀。需要说明的是,服务描述文件可以包括目标服务信息,还可以包括开发所需的其它信息,例如目标组件的基础信息(如目标组件的文件名、版本号、描述概要等)、依赖信息(目标组件可能会依赖其它组件)等,但这些其它信息不参与本申请实施例所提供的方法中的流程,因此这里不再额外进行赘述。
可一并参见图4,是本申请实施例提供的一种服务描述文件生成的原理示意图。如图4所示,在使用Objective-C语言进行开发的场景下,命令行工具会扫描Objective-C代码中包含目标注解的头文件,将该头文件中的目标注解以及目标注解所附着的相关信息(如目标注解附加在组件代码所编写的方法的声明、属性的声明等前面,则目标注解与这些被附加的组件代码之间会建立起关联关系)还有其它组件代码全部解析出来,生成第一抽象语法树,第一抽象语法树包括了初始服务信息在内的目标头文件中的全部代码信息,进一步,经过遍历第一抽象语法树,将第一抽象语法树中的初始服务信息转换为具有标准数据格式的第二抽象语法树后,命令行工具可以生成YAML格式的描述信息(即将第二抽象语法树转换为YAML格式),实际上,在同一个目标组件中,YAML格式的服务描述文件可以有两个,本质是配置文件,分别为com_raft.yaml文件和com_config.yaml文件,但目标服务信息最终会被写入com_raft.yaml文件中。可选的,服务描述文件也可以由组件开发人员手写生成。
上述可知,步骤S101的实现过程可以将目标注解从目标头文件中提取出来,进而转换成具有YAML格式的目标服务信息,例如,命令行工具识别到目标注解A附加在了属性a上面,则可以将目标注解A以及属性a都进行提取以及转换,与目标注解A无关的其它数据则会被剔除,经过如上述步骤S101所述的转换过程后,生成的目标服务信息可以描述如何实现属性a的注入。
其中,命令行工具即CLI(command-line interface,也可翻译为命令行界面)工具,开发人员通过键盘输入指令,计算机设备接收到指令后,予以执行,命令行工具较图形用户界面(GUI)节约计算机系统的资源,且在熟记命令的前提下,使用命令行工具通常要比使用图形用户界面的操作速度快,开发人员可以在开发前预先将命令行工具安装在自己的计算机设备上。其中,抽象语法树(Abstract Syntax Code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,例如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,且抽象语法树并不依赖于源代码所采用的编程语言的语法,因此在编译器、浏览器、智能编辑器等诸多领域得到了广泛应用。
需要说明的是,为了提升自动生成文件的效率,命令行工具可以多线程并行处理多个头文件,在碰到单个内容过长的头文件时,可以自动分割文件内容并行处理,最终命令行工具会汇总处理所有的数据,生成一个YAML格式的服务描述文件,具体实现过程如下:命令行工具可以并行对当前文件夹下的多个头文件进行扫描,并将包含目标注解的头文件确定为目标头文件,若目标头文件的数量为M个(M为大于1的整数),还可以对M个目标头文件进行并行处理。对单个目标头文件来说,命令行工具可以根据拆分规则对该单个目标头文件进行拆分,例如,由于每个头文件可能包含好几个类,因此可以按照类的结构进行拆分,得到N个拆分头文件,其中,N为大于1的整数,拆分规则还可以根据实际情况做其它的设置,本申请不做限定。进而命令行工具可以并行处理上述N个拆分头文件,得到共同用于描述目标组件提供的开放服务的N组子目标服务信息,从而可以将N组子目标服务信息分别存储至N个子服务描述文件,其中,由拆分头文件生成子服务描述文件的过程与上述单个目标头文件生成服务描述文件的过程相同,在此不再进行赘述。进一步,命令行工具可以根据组合逻辑对上述N个子服务描述文件进行组合,得到单个目标头文件对应的服务描述文件。其中,组合逻辑可以根据上述拆分规则进行设置。
本申请提供的方法可以支持在目标组件的源代码中加入目标注解来定义需要暴露的开放服务,目标注解对应的目标服务信息会自动生成服务描述文件跟随目标组件一起发布到组件市场。其中,目标注解是用宏实现的,其概念借鉴了传统的IoC(Inversion ofControl,控制反转)框架,目标注解只能添加在公有头文件对类的声明中,目标注解的位置是附加在对应语法声明的上方(即编写在对应语法声明的前面),同一位置需要附加多个目标注解时,对顺序没有要求。因此,目标注解可以理解为在目标头文件中按照注解协议编写的代码,每一种目标注解都需要满足通用的注解协议,即:当目标注解中包括注解关键字,且目标注解编写在目标头文件对类的声明中,且目标头文件为公有头文件(与私有头文件相对),且目标注解编写在对应的语法声明之前时,可以确定目标注解满足注解协议。此外,若在编写目标注解的过程中出现不满足注解协议的情况,可以进行报错处理或警告处理,在编辑界面上显示对应的提示信息来提示组件开发人员进行修改。此外,除了上述所说的通用的注解协议外,组件开发人员还可以根据实际情况自行定义所需的注解协议,即可以对每种目标注解定义不同的注解协议,例如,在Objective-C语言中,可以支持的注解关键字有7个,包括:RAFT_SERVICE、RAFT_INTERFACE、RAFT_PROPERTY、RAFT_METHOD、RAFT_INITMETHOD、RAFT_FACTORYCLASS以及RAFT_FACTORYMETHOD,它们各自对应的用法以及注解协议如下:
(1)RAFT_SERVICE:使用RAFT_SERVICE可以将一个类(Class)声明为开放服务(Service),RAFT_SERVICE只能添加在公有类的声明中,在类别(Category)和类扩展(Extension)中添加无效,即虽然类上可扩展Category和Extension,但不能把这两者声明为开放服务。RAFT_SERVICE添加的位置是附加在@interface上方。
(2)RAFT_INTERFACE:使用RAFT_INTERFACE可以指定一个开放服务所实现的interface(接口,指非正式协议),只能添加在公有类的声明中,在Category和Extension中添加无效。RAFT_INTERFACE添加的位置是附加在@interface上方,使用的前提是当前类已经附加了RAFT_SERVICE。RAFT_INTERFACE注解需要传入interface作为参数,比如:RAFT_INTERFACE(interface1,interface2)。业务框架支持通过interface来获取到开放服务,所以当两个开放服务都声明实现了同一个interface的时候,业务框架只会保留对其中一个开放服务的引用,例如按照先后顺序读取目标注解时,可以保留最后一个被读取到的interface。
(3)RAFT_PROPERTY:使用RAFT_PROPERTY可以实现对类的实例属性注入,添加位置为@property上方。
(4)RAFT_METHOD:使用RAFT_METHOD可以实现对类的实例方法注入,添加位置为实例方法声明的上方。
(5)RAFT_INITMETHOD:可以使用RAFT_INITMETHOD指定用于初始化开放服务的实例方法,添加位置为初始化方法的上方。Objective-C的初始化方法有命名规则,返回值为instancetype(用于表示一个未知的Objective-C对象)或当前类型,方法前缀为init。
(6)RAFT_FACTORYCLASS和RAFT_FACTORYMETHOD:当一个开放服务需要通过类方法来初始化时,需要指定工厂类(RAFT_FACTORYCLASS)以及工厂方法(RAFT_FACTORYMETHOD)。RAFT_FACTORYCLASS的附加位置为工厂类@interface的上方,RAFT_FACTORYMETHOD的附加位置为类方法的上方。RAFT_FACTORYCLASS可以与RAFT_SERVICE在同一个类上面同时使用。RAFT_FACTORYMETHOD的参数是可选的,不填参数的时候,默认使用类方法的返回类型作为开放服务的类名,其中,可以使用编译器对RAFT_FACTORYMETHOD注解进行解析,得到这个工厂方法是附加在哪个方法上、被附加的方法具有什么参数等信息,从而得到返回类型。但当类方法的返回参数类型无法准确匹配到具体开放服务类的时候(即类方法返回的参数类型为开放服务类的时候,才会被认为是合法的,通过对一个全局表格进行搜索可以判定是否合法,该表格记录有类被描述为开放服务的信息),需要通过参数指定,参数可以是Class(类)或Protocol(正式协议)的名字,在使用类方法初始化时,通过参数指定的方式具有最高优先级。其中,工厂类和工厂方法是设计模式中的一种概念,用来声明创建开放服务的方式,而不是用来将类声明为开放服务,因其标记了某个类或某个方法是生产开放服务的地方,故而称之为“工厂”。
可一并参见下面的代码片段,该代码片段使用目标注解将一个名为RAFTBasicService的类声明为开放服务,并指定了这个开放服务实现的接口。
Figure BDA0002882963700000131
Figure BDA0002882963700000141
在该代码片段中,除了上述所说的由注解关键字组成的目标代码外,还包括用Objective-C语言编写的组件代码,其中,@interface、@property、instancetype等都为Objective-C语言提供的关键字。从上述代码可知,RAFTBasicService类继承于基类NSObject,同时要指定实现名为RABasicProtocol的接口(或者称为协议),并通过RAFT_PROPERTY注解实现属性注入,通过RAFT_INITMETHOD注解指定了自定义的初始化方法,通过RAFT_METHOD注解,在后续运行时业务框架会自动调用startup方法。其中,若不添加RAFT_PROPERTY注解,则对RAFTBasicService类进行初始化时,没有添加注解的属性为空,导致读不到有效信息。
步骤S102,当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
具体的,一个应用程序可能需要使用多个组件,因此可以对多个组件进行集成,当其中的目标组件被集成到应用工程时,应用开发人员可以通过计算机设备调用命令行工具来获取与目标组件对应的服务描述文件、与其它组件对应的描服务述文件以及应用工程中的应用描述文件(可以由应用开发人员编写),进而可以将这些描述文件进行合并,得到资源锁定文件,该资源锁定文件可以包括上述步骤S101中所说与目标组件对应的服务描述文件中的目标服务信息,以及其它组件对应的服务信息,即命令行工具可以将所需的全部组件中的服务信息都合并到资源锁定文件中。其中,在使用Objective-C语言进行开发的场景下,资源锁定文件也可以包括两个文件,分别为raft.lock文件和raft_config.lock文件,且raft.lock文件与com_raft.yaml文件对应,raft_config.lock文件与com_config.yaml文件对应。
进一步,可以调用命令行工具将资源锁定文件(包括raft.lock文件和raft_config.lock文件)中的目标服务信息转换为服务代码,转换得到的服务代码可以与上述组件代码具有相同的语言类型,例如在使用Objective-C语言进行开发的场景下,可以将目标服务信息转换为Objective-C语言类型的代码,并将该服务代码保存在代码文件中,该代码文件可以是与头文件、源文件互相独立的文件。进一步,可以将该代码文件插入到上述应用工程,相应的,该应用工程可以为Objective-C语言框架下的应用工程。此外,若应用开发人员需要浏览该代码文件,可以直接打开进行浏览,也可以在应用工程打开浏览。
步骤S103,当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。
具体的,当上述应用工程运行时,在步骤S102中生成的服务代码可以自动调用业务框架来注册上述目标组件提供的开放服务,因此避免了应用开发人员手动编写注册开放服务的代码。其中,业务框架具体可以是IoC(Inversion of Control,控制反转)框架,IoC框架是运行时框架,可以理解为基础的运行逻辑,控制反转是一种重要的面向对象编程的设计原则,可以用来降低代码之间的耦合度,有利于功能复用,使得程序的整个体系结构变得非常灵活,在运行期,外部容器动态地将依赖对象注入组件,当外部容器启动后,外部容器就会进行初始化,而不需要应用开发人员关心这部分的工作。
请一并参加下表,以上述步骤S101中的代码片段中的RAFTBasicService类为例,本申请提供的方法相对于Typhoon框架,注册开放服务时需要开发人员手写的代码行数如下:
组件开发人员 应用开发人员
本申请提供的方法 6行 0行
“台风”(Typhoon)框架 0行 大约15行
上述可知,现有的方法(如Typhoon框架)中,组件开发人员不能感知IoC框架,只提供API,因此应用开发人员在集成组件时需要手动描述该组件提供的开放服务,重复描述导致开发效率低。而在本申请提供的方法中,组件开发人员和应用开发人员都需要关注IoC框架,只是关注的角度不同,组件开发人员使用注解描述组件可以提供哪些能力,应用开发人员无需再进行描述,从而将开发成本从应用开发人员身上转移到了组件开发人员身上,由上表可知,相当于命令行工具可以将6行代码还原为现有方法需要的约15行代码,总体而言,需要开发人员手写的代码行数明显减少,可以理解,当集成多个组件时,本申请提供的方法所产生的有益效果会更加显著。
此外,为了实现端云一体中后台参数自动回填的功能,现有的Objective-C注解方案只关注客户端本身的IoC实现,而不关心注入后台参数,因此现有方案的效率低于本申请所提供的方案。例如,在目标组件自带后台功能的场景下,如使用某些社交应用第三方授权登录,在进行授权登录接入前,开发人员需要经过注册开发者账户、资质认证、填写资料、提交并等待审核、创建网站应用等许多步骤才能申请并获取到所需的AppID,最后才可以将AppID粘贴到代码中,整个流程不仅过程繁复,而且成本较高,但使用本申请所提供的方法,可以将上述过程通过自动化的方式得到解决,如可以在代码中的AppID对应的属性上添加目标注解,则通过业务框架(为IoC框架)可以将目标组件后台生成的AppID自动注入,进而可以实现AppID自动回填。
请一并参见图5,是本申请实施例提供的一种服务信息传递过程的流程示意图。如图5所示,该传递过程可以包括以下步骤:
步骤S201,在源代码中使用注解定义目标组件提供的开放服务;
具体的,组件开发人员可以在目标组件的源代码中添加注解,并使用注解定义目标组件提供的开放服务,则目标组件将会依赖于所添加的注解,此时的注解即上述图3所对应实施例中的目标注解。
步骤S202,将注解信息写入服务描述文件;
具体的,组件开发人员可以在命令行工具中输入写服务描述文件的命令,进而命令行工具可以执行该命令,将根据目标注解及其相关信息生成的目标服务信息写入服务描述文件,写服务描述文件的命令具体可以为“fef updateyaml”,其中,服务描述文件包括com_raft.yaml文件和com_config.yaml文件。
步骤S203,将目标组件发布到组件市场;
具体的,组件开发人员可以在命令行工具中输入发布组件的命令,进而命令行工具可以执行该命令,将目标组件发布到组件市场,其中,发布组件的命令具体可以为“fefpublish”。
步骤S204,集成应用工程所需的全部组件;
具体的,当应用工程需要集成多个组件时,应用开发人员可以在命令行工具中输入导入组件的命令,该命令具体可以为“fef import”,进而命令行工具会自动将所需的全部组件(包括上述目标组件)进行集成,并将全部组件对应的服务描述文件以及应用工程中的应用描述文件合并为资源锁定文件,同时上述步骤S202中的目标服务信息也会被集成到该资源锁定文件中。其中,资源锁定文件包括raft.lock文件和raft_config.lock文件,应用描述文件也可以包括两个文件:app_raft.yaml文件和app_config.yaml文件,且raft.lock文件与app_raft.yaml文件对应,raft_config.lock文件与app_config.yaml文件对应。可以理解,在源代码中添加了目标注解的组件都可以称之为目标组件,在本申请实施例中仅以一个目标组件为例进行说明,当存在多个目标组件时,命令行工具可以并行处理多个目标组件对应的源代码中的目标注解,根据目标注解生成服务描述文件的具体过程均与上述图3所对应实施例中的步骤S101相同,在此不再进行赘述。
步骤S205,通过资源锁定文件生成服务代码;
具体的,命令行工具可以将资源锁定文件中的目标服务信息转换为代码,并将给代码插入到应用工程中。
步骤S206,调用业务框架接口注册开放服务。
具体的,应用工程会依赖于业务框架,从而上述生成的代码可以调用业务框架(即控制反转框架)提供的接口,在应用工程运行时注册对应的开放服务。
本申请实施例可以通过调用命令行工具获取用于描述开放服务的目标注解,并可以根据目标注解生成服务描述文件,进一步,当目标组件被集成到应用工程时,可以根据上述服务描述文件生成包含有目标服务信息的资源锁定文件,进而可以将该目标服务信息转换为服务代码,并插入到上述应用工程中,从而当该应用工程运行时,可以通过上述服务代码来调用业务框架以注册目标组件提供的开放服务。上述可知,本申请通过提供目标注解使得组件开发人员可以描述目标组件提供的开放服务,并通过调用命令行工具自动将目标注解所定义的服务信息集成到应用工程中,使得应用开发人员可以直接通过业务框架获取到上述开放服务并使用,而无需关心该开放服务的初始化流程以及依赖项,从而可以实现对组件的高效复用,且注册开放服务所需的服务代码可以由命令行工具自动生成,而无需应用开发人员进行手动编写,此外,命令行工具可以多线程并行处理多个头文件,因此可以极大地提升开发效率,同时可以提升组件开发人员和应用开发人员之间的协作效率。
请参见图6,是本申请实施例提供的一种基于注解的数据处理装置的结构示意图。如图6所示,该基于注解的数据处理装置1可以包括描述文件生成模块11、代码生成模块12、框架调用模块13;
描述文件生成模块11,用于调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;
代码生成模块12,用于当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
框架调用模块13,用于当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。
其中,描述文件生成模块11的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,代码生成模块12的具体功能实现方式可以参见上述图3所对应实施例中的步骤S102,框架调用模块13的具体功能实现方式可以参见上述图3所对应实施例中的步骤S103,,这里不再进行赘述。
请一并参见图6,该基于注解的数据处理装置1还可以包括注解模块14;
注解模块14,用于当所述目标注解中包括所述注解关键字,且所述目标注解编写在所述目标头文件对类的声明中,且所述目标注解编写在对应的声明之前时,确定所述目标注解满足所述注解协议;或者,用于当所述目标注解包括注解参数,且所述目标注解用于对所述开放服务进行初始化时,获取与所述目标注解相关联的初始化方法所返回的参数类型,若所返回的参数类型为服务类型,则确定所述目标注解满足所述注解协议。
其中,注解模块14的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
请一并参见图6,描述文件生成模块11可以包括:第一生成单元111、第二生成单元112、第三生成单元113;
第一生成单元111,用于调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,根据所述头文件中的所述目标注解以及与所述目标注解相关联的组件代码生成第一抽象语法树;所述头文件包括目标组件的组件代码;所述第一抽象语法树包括与所述目标注解对应的初始服务信息;
第二生成单元112,用于根据所述第一抽象语法树中的初始服务信息生成第二抽象语法树;
第三生成单元113,用于根据所述第二抽象语法树生成用于描述所述目标组件提供的开放服务的目标服务信息,将所述目标服务信息存储至服务描述文件。
其中,第一生成单元111、第二生成单元112、第三生成单元113的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
请一并参见图6,描述文件生成模块11可以包括:拆分单元114、并行处理单元115、组合单元116;
拆分单元114,用于调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,对所述头文件进行拆分,得到N个拆分头文件;N为大于1的整数;
并行处理单元115,用于并行处理所述N个拆分头文件,得到共同用于描述目标组件提供的开放服务的N组子目标服务信息,将所述N组子目标服务信息分别存储至N个子服务描述文件;
组合单元116,用于对所述N个子服务描述文件进行组合,得到所述头文件对应的服务描述文件。
其中,拆分单元114、并行处理单元115、组合单元116的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
请一并参见图6,代码生成模块12可以包括:文件获取单元121、合并单元122、代码转换单元123;
文件获取单元121,用于当所述目标组件被集成到应用工程时,调用所述命令行工具获取与所述目标组件对应的所述服务描述文件以及所述应用工程中的应用描述文件;
合并单元122,用于将所述服务描述文件以及所述应用描述文件合并为资源锁定文件;所述资源锁定文件包括所述服务描述文件中的所述目标服务信息;
代码转换单元123,用于将所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
所述代码转换单元123具体用于调用所述命令行工具将所述资源锁定文件中的所述目标服务信息转换成与所述组件代码具有相同语言类型的服务代码,将所述服务代码保存至代码文件;所述语言类型为扩充的面向对象编程语言类型;将所述代码文件集成到所述应用工程中;所述应用工程为扩充的面向对象编程语言框架下的应用工程。
其中,文件获取单元121、合并单元122、代码转换单元123的具体功能实现方式可以参见上述图3所对应实施例中的步骤S102,这里不再进行赘述。
请一并参见图6,第一生成单元111可以包括:查找子单元1111、遍历子单元1112、解析子单元1113;
查找子单元1111,用于调用命令行工具在文件夹中进行查找,获取所述文件夹中的头文件;所述头文件包括基于所述组件代码所编写的类的声明;
遍历子单元1112,用于对所述头文件进行遍历,当遍历到所述头文件中存在注解关键字时,确定所述头文件中存在目标注解,将存在所述目标注解的头文件确定为目标头文件;
解析子单元1113,用于对所述目标头文件中的所述目标注解以及与所述目标注解相关联的组件代码进行解析,生成第一抽象语法树。
其中,查找子单元1111、遍历子单元1112、解析子单元1113的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
请一并参见图6,第二生成单元112可以包括:提取子单元1121、转换子单元1122;
提取子单元1121,用于对所述第一抽象语法树进行遍历;当在所述第一抽象语法树中遍历到注解关键字时,根据所述目标注解与所述组件代码之间的关联关系,从所述第一抽象语法树中提取与所述注解关键字相关的数据,作为初始服务信息;
转换子单元1122,用于按照标准数据格式对所述初始服务信息进行格式转换,得到第二抽象语法树。
其中,提取子单元1121、转换子单元1122的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
本申请实施例可以通过调用命令行工具获取用于描述开放服务的目标注解,并可以根据目标注解生成服务描述文件,进一步,当目标组件被集成到应用工程时,可以根据上述服务描述文件生成包含有目标服务信息的资源锁定文件,进而可以将该目标服务信息转换为服务代码,并插入到上述应用工程中,从而当该应用工程运行时,可以通过上述服务代码来调用业务框架以注册目标组件提供的开放服务。上述可知,本申请通过提供目标注解使得组件开发人员可以描述目标组件提供的开放服务,并通过调用命令行工具自动将目标注解所定义的服务信息集成到应用工程中,使得应用开发人员可以直接通过业务框架获取到上述开放服务并使用,而无需关心该开放服务的初始化流程以及依赖项,从而可以实现对组件的高效复用,且注册开放服务所需的服务代码可以由命令行工具自动生成,而无需应用开发人员进行手动编写,此外,命令行工具可以多线程并行处理多个头文件,因此可以极大地提升开发效率,同时可以提升组件开发人员和应用开发人员之间的协作效率。
请参见图7,是本申请实施例提供的一种计算机设备的结构示意图。如图7所示,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1004可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图7所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图7所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
调用命令行工具获取目标注解,根据目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据目标服务信息生成服务描述文件;
当目标组件被集成到应用工程时,获取与目标组件对应的服务描述文件,将服务描述文件中的目标服务信息转换成服务代码,将服务代码插入到应用工程中;
当应用工程运行时,通过服务代码调用业务框架注册开放服务。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3所对应实施例中对该基于注解的数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的基于注解的数据处理装置1所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器加载并执行上述程序指令时,能够执行前文图3所对应实施例中对上述基于注解的数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
上述计算机可读存储介质可以是前述任一实施例提供的基于注解的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flashcard)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3所对应实施例提供的方法。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (10)

1.一种基于注解的数据处理方法,其特征在于,包括:
调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件;当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中;
当所述应用工程运行时,通过所述服务代码调用业务框架注册所述开放服务。
2.根据权利要求1所述的方法,其特征在于,所述调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件,包括:
调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,根据所述头文件中的所述目标注解以及与所述目标注解相关联的组件代码生成第一抽象语法树;所述头文件包括目标组件的组件代码;所述第一抽象语法树包括与所述目标注解对应的初始服务信息;
根据所述第一抽象语法树中的初始服务信息生成第二抽象语法树;
根据所述第二抽象语法树生成用于描述所述目标组件提供的开放服务的目标服务信息,将所述目标服务信息存储至服务描述文件。
3.根据权利要求2所述的方法,其特征在于,所述调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,根据所述头文件中的所述目标注解以及与所述目标注解相关联的组件代码生成第一抽象语法树,包括:
调用命令行工具在文件夹中进行查找,获取所述文件夹中的头文件;所述头文件包括基于所述组件代码所编写的类的声明;
对所述头文件进行遍历,当遍历到所述头文件中存在注解关键字时,确定所述头文件中存在目标注解,将存在所述目标注解的头文件确定为目标头文件;
对所述目标头文件中的所述目标注解以及与所述目标注解相关联的组件代码进行解析,生成第一抽象语法树。
4.根据权利要求2所述的方法,其特征在于,所述根据所述第一抽象语法树中的初始服务信息生成第二抽象语法树,包括:
对所述第一抽象语法树进行遍历;
当在所述第一抽象语法树中遍历到注解关键字时,根据所述目标注解与所述组件代码之间的关联关系,从所述第一抽象语法树中提取与所述注解关键字相关的数据,作为初始服务信息;
按照标准数据格式对所述初始服务信息进行格式转换,得到第二抽象语法树。
5.根据权利要求1所述的方法,其特征在于,所述调用命令行工具获取目标注解,根据所述目标注解生成用于描述目标组件提供的开放服务的目标服务信息,根据所述目标服务信息生成服务描述文件,包括:
调用命令行工具对头文件进行扫描,当所述头文件中存在目标注解时,对所述头文件进行拆分,得到N个拆分头文件;N为大于1的整数;
并行处理所述N个拆分头文件,得到共同用于描述目标组件提供的开放服务的N组子目标服务信息,将所述N组子目标服务信息分别存储至N个子服务描述文件;
对所述N个子服务描述文件进行组合,得到所述头文件对应的服务描述文件。
6.根据权利要求2所述的方法,其特征在于,所述当所述目标组件被集成到应用工程时,获取与所述目标组件对应的所述服务描述文件,将所述服务描述文件中的所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中,包括:
当所述目标组件被集成到应用工程时,调用所述命令行工具获取与所述目标组件对应的所述服务描述文件以及所述应用工程中的应用描述文件;
将所述服务描述文件以及所述应用描述文件合并为资源锁定文件;所述资源锁定文件包括所述服务描述文件中的所述目标服务信息;
将所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中。
7.根据权利要求6所述的方法,其特征在于,所述将所述目标服务信息转换成服务代码,将所述服务代码插入到所述应用工程中,包括:
调用所述命令行工具将所述资源锁定文件中的所述目标服务信息转换成与所述组件代码具有相同语言类型的服务代码,将所述服务代码保存至代码文件;所述语言类型为扩充的面向对象编程语言类型;
将所述代码文件集成到所述应用工程中;所述应用工程为扩充的面向对象编程语言框架下的应用工程。
8.根据权利要求3所述的方法,其特征在于,所述目标注解为所述目标头文件中按注解协议编写的代码;
所述方法还包括:
当所述目标注解中包括所述注解关键字,且所述目标注解编写在所述目标头文件对类的声明中,且所述目标注解编写在对应的声明之前时,确定所述目标注解满足所述注解协议;或者,
当所述目标注解包括注解参数,且所述目标注解用于对所述开放服务进行初始化时,获取与所述目标注解相关联的初始化方法所返回的参数类型,若所返回的参数类型为服务类型,则确定所述目标注解满足所述注解协议。
9.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1-8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行权利要求1-8任一项所述的方法。
CN202110005012.3A 2021-01-04 2021-01-04 基于注解的数据处理方法、计算机设备以及可读存储介质 Pending CN114721713A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110005012.3A CN114721713A (zh) 2021-01-04 2021-01-04 基于注解的数据处理方法、计算机设备以及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110005012.3A CN114721713A (zh) 2021-01-04 2021-01-04 基于注解的数据处理方法、计算机设备以及可读存储介质

Publications (1)

Publication Number Publication Date
CN114721713A true CN114721713A (zh) 2022-07-08

Family

ID=82234151

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110005012.3A Pending CN114721713A (zh) 2021-01-04 2021-01-04 基于注解的数据处理方法、计算机设备以及可读存储介质

Country Status (1)

Country Link
CN (1) CN114721713A (zh)

Similar Documents

Publication Publication Date Title
US8959477B2 (en) Scripting language for business applications
KR102220127B1 (ko) 커스터마이징된 소프트웨어 개발 키트(sdk) 생성을 위한 방법 및 장치
US8745584B2 (en) Dependency injection by static code generation
US20150169320A1 (en) Verification of backward compatibility of software components
US20140047319A1 (en) Context injection and extraction in xml documents based on common sparse templates
US20210373860A1 (en) Intent compiler
CN103164249A (zh) 用于脚本语言编译器的扩展机制
US20160012144A1 (en) Javascript-based, client-side template driver system
CN114153459A (zh) 接口文档生成方法及装置
Gómez et al. A model-based approach for developing event-driven architectures with AsyncAPI
CN113326030A (zh) 一种业务请求的处理方法和装置
CN117093286A (zh) 插件生成方法、装置、设备及计算机可读存储介质
CN115599386A (zh) 代码生成方法、装置、设备及存储介质
CN114816361A (zh) 拼搭工程生成方法、装置、设备、介质和程序产品
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN108595656B (zh) 一种数据的处理方法及系统
CN113987337A (zh) 基于组件化动态编排的搜索方法、系统、设备及存储介质
CN111400736B (zh) 应用程序加密的方法、装置、存储介质及电子设备
CN117850792A (zh) 智能合约解析方法、装置及计算机设备
CN117008918A (zh) 领域特定语言的处理方法、装置、介质及电子设备
CN111399842A (zh) 一种代码编译方法及装置
Martinez et al. Migrating c/c++ software to mobile platforms in the adm context
CN113626001B (zh) 一种基于脚本的api动态编排方法及装置
CN114721713A (zh) 基于注解的数据处理方法、计算机设备以及可读存储介质
Steffen DSL-driven integration of http services in dime

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination