CN112817600A - 程序注解编译方法及其相应的装置、设备、介质 - Google Patents

程序注解编译方法及其相应的装置、设备、介质 Download PDF

Info

Publication number
CN112817600A
CN112817600A CN202110170870.3A CN202110170870A CN112817600A CN 112817600 A CN112817600 A CN 112817600A CN 202110170870 A CN202110170870 A CN 202110170870A CN 112817600 A CN112817600 A CN 112817600A
Authority
CN
China
Prior art keywords
class
interface
implementation
source code
channel
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
CN202110170870.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.)
Guangzhou Cubesili Information Technology Co Ltd
Original Assignee
Guangzhou Cubesili Information Technology 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 Guangzhou Cubesili Information Technology Co Ltd filed Critical Guangzhou Cubesili Information Technology Co Ltd
Priority to CN202110170870.3A priority Critical patent/CN112817600A/zh
Publication of CN112817600A publication Critical patent/CN112817600A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation

Abstract

本申请公开一种程序注解编译方法及其相应的装置、设备、介质,所述方法包括:从程序的代码资源中提取出接口类代码集和实现类代码集,构成汇总源码库;过滤汇总源码库,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;基于目标渠道的源码库,构造表征接口类与其实现类的代码集之间的映射关系的匹配信息表;基于匹配信息表中的接口类与实现类之间的映射关系,根据关联类命名规则创建程序中相应的类文件,以便在程序运行加载类文件后,由查询接口遵循关联类命名规则查询调用与接口类相应的实现类的实例化对象。本申请为多渠道并行开发提供一种差异化编译服务,有助于提升开发和编译效率。

Description

程序注解编译方法及其相应的装置、设备、介质
技术领域
本申请涉及计算机软件开发领域,尤其涉及一种程序注解编译方法、装置及其相应的电子设备和非易失性存储介质。
背景技术
随着互联网的发展,互联网的用户数量也逐日攀升,各大互联网公司也开发各类型的应用程序满足网民的需求。现如今互联网公司的软件项目一般使用现有的软件开发应用程序开发满足相应需求的软件开发项目,以节省开发时间和开发费用,提升软件项目的开发效率。
但现如今的软件开发应用程序所编译的同一个软件开发项目的代码资源无法分渠道进行差异化编译,导致各个开发团队无法根据开发需求定制化编译实现其开发需求的代码资源。
其次,开发人员基于软件开发应用程序编译其开发需求的资源中将包含其他开发需求的代码资源、图片资源等非必要的开发资源,将使得代码资源中包含的代码资源及文件资源冗余。
针对现有技术存在的影响软件开发的各种问题,有必要探索一些行之有效的解决方案。
发明内容
本申请的目的之一在于解决上述问题至少之一而提供一种程序注解编译方法及其相应的装置、电子设备、非易失性存储介质。
为满足本申请的各个目的,本申请采用如下技术方案:
适应本申请的目的之一而提供的一种程序注解编译方法,其包括如下步骤:
从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库;
对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;
基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表;
基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象。
进一步的实施例中,对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库的步骤,包括:
调用所述汇总源码库,确定预先注解的多个渠道标识中的唯一一个处于被激活状态,将其确定为所述的目标渠道标识;
从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集;
将被执行删除后的源码库作为所述的目标渠道的源码库。
较佳的实施例中,从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集的步骤中,所述实现类代码集所对应的渠道注解标识中的注解参数,包括一个或多个,分别用于描述单个渠道标识所拥有的私有实现类或多个渠道标识共同拥有的共用实现类。
较佳的实施例中,基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表的步骤之前,包括:
校验所述目标渠道源码库中是否均存在与其中的接口类相对应的实现类代码集,若均存在则通过校验以执行后续步骤,否则中止编译并告警。
进一步的实施例中,通过向该类文件提供的接口传递接口类,由该接口遵循所述关联类命名规则而根据接口类查询调用与该接口类该类文件中相应的实现类的步骤,包括:
触发调用一个所述的接口类,向所述查询接口查询该接口类;
所述查询接口根据所述关联类命名规则,将所述接口类转换为所述类文件中的实现类;
所述查询接口对所述实现类相应的代码集进行实例化,获得实例化对象;
所述查询接口将所述实例化对象返回并执行。
进一步的实施例中,包括如下前置步骤:
获取适用于当前开发工程的渠道标识集合;
为所述渠道标识集合的各个渠道标识创建相对应的注解类信息;
修改相对应的注解类信息,将与预先指定的当前编译标识相同的渠道标识的标记为所述的目标渠道标识,将其余渠道标识标记为非目标渠道标识。
较佳的实施例中,包括如下步骤:
为每个所述的渠道标识创建对应的代码目录,用于存储相应的渠道标识所需的文件资源或至少部分代码资源,将其添加到与所述目标渠道标识相对应的编译路径中参与编译。
适应本申请的目的之一而提供的一种程序注解编译装置,其包括:
源码库构成单元,用于从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库;
源码库过滤单元,用于对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;
信息表构造单元,用于基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表;
类文件创建单元,用于基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象。
部分实施例中,所述源码库过滤单元包括:
标识确定模块,用于调用所述汇总源码库,确定预先注解的多个渠道标识中的唯一一个处于被激活状态,将其确定为所述的目标渠道标识;
代码过滤模块,用于从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集;
源码库确定模块,用于将被执行删除后的源码库作为所述的目标渠道的源码库。
部分实施例中,所述类文件创建单元包括:
接口类查询模块,用于触发调用一个所述的接口类,向所述查询接口查询该接口类;
接口类转换模块,用于所述查询接口根据所述关联类命名规则,将所述接口类转换为所述类文件中的实现类;
实例化模块,用于所述查询接口对所述实现类相应的代码集进行实例化,获得实例化对象;
对象返回模块,用于所述查询接口将所述实例化对象返回并执行。
适应本申请的目的之一而提供的一种电子设备,包括中央处理器和存储器,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行本申请所述的程序注解编译方法的步骤。
适应本申请的另一目的而提供的一种非易失性存储介质,其以计算机可读指令的形式存储有依据所述的程序注解编译方法所实现的计算机程序,该计算机程序被计算机调用运行时,执行该方法所包括的步骤。
相对于现有技术,本申请的优势如下:
首先,本申请通过构建一种渠道定制化编译功能,为基于同一开发工程并行多渠道开发的开发方式提供一种针对目标渠道进行编译的服务。通过从程序的代码资源中提取出以接口类标识进行注解的接口类代码集及以实现类标识进行注解的实现类代码集,构造汇总源码库,并过滤除该汇总源码库中不以目标渠道进行注解的实现类代码集,形成包含目标渠道所属的实现类代码集的源码库,并基于该源码库中的实现类代码集与接口类代码集之间的映射关系,构造匹配信息表,以便根据该匹配信息表且遵循关联类命名规则,创建该程序中相应的类文件。通过这一逻辑,开发人员为拥有多渠道代码资源的开发工程进行编译时,可针对目标渠道编译该渠道所需的代码资源,使各渠道的编译体现差异化,防止目标渠道的类文件中存在其他渠道的代码资源,造成数据冗余,开发人员在同一工程中开发多渠道代码变成更为系统和安全。
其次,本申请构造一种注解编译能力,通过提供相应的注解标识,以确认相应的代码资源为当前编译的目标渠道所需的代码资源,针对该代码资源进行上述的渠道定制化编译,且同一开发工程进行多渠道并行开发时,通过为同一的代码资源编写多个不同渠道的注解标识,以实现代码资源复用,提升各渠道的开发效率。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请的程序注解编译方法的编译执行逻辑架构示意图;
图2为本申请的程序注解编译方法的典型实施例的流程示意图;
图3为图2中步骤S12的具体步骤所形成的流程示意图;
图4为图2中步骤S14的具体步骤所形成的流程示意图;
图5为本申请的程序注解编译方法的一种实施例中由其所添加的前置步骤所构成的流程示意图;
图6为本申请的程序注解编译装置的典型实施例的原理框图;
图7为本申请一个实施例的计算机设备的基本结构框图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“客户端”、“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他诸如个人计算机、平板电脑之类的通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(PersonalCommunications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global PositioningSystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“客户端”、“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“客户端”、“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本申请所称的“服务器”、“客户端”、“服务节点”等名称所指向的硬件,本质上是具备个人计算机等效能力的电子设备,为具有中央处理器(包括运算器和控制器)、存储器、输入设备以及输出设备等冯诺依曼原理所揭示的必要构件的硬件装置,计算机程序存储于其存储器中,中央处理器将存储在外存中的程序调入内存中运行,执行程序中的指令,与输入输出设备交互,借此完成特定的功能。
需要指出的是,本申请所称的“服务器”这一概念,同理也可扩展到适用于服务器机群的情况。依据本领域技术人员所理解的网络部署原理,所述各服务器应是逻辑上的划分,在物理空间上,这些服务器既可以是互相独立但可通过接口调用的,也可以是集成到一台物理计算机或一套计算机机群的。本领域技术人员应当理解这一变通,而不应以此约束本申请的网络部署方式的实施方式。
请参阅图1,本申请相关技术方案实施时的执行逻辑按图中所示的架构进行搭建,其各部分的作用及功能揭示如下:
本申请所称的程序的代码资源80中包含以接口类标识进行注解的接口类代码集81和以实现类标识进行注解的实现类代码集82,所述实现类代码集82存在引用所述接口类代码集81的引用关系。
本申请所称的目标渠道源码库83是通过将实现类代码集82进行过滤而构造生成的,通过将所述实现类代码集82中渠道注解标识不为目标渠道标识的实现类代码集进行滤除,以获取只包含渠道注解标识为所述目标渠道标识的所述实现类代码集,构建所述目标渠道源码库83。
基于所述目标渠道源码库83中的各个所述实现类各自所引用至接口类代码集中相应的接口类的引用关系,构造本申请所称的匹配信息表84,以便根据匹配信息表中实现类与接口类的关系,在遵循本关联类命名规则下创建类文件85。
针对目标渠道编译所生成的类文件85可为一个或多个,且相应的类文件85中存在的实现类和所述实现类所引用的接口类也可为一个或多个,当类文件85被加载运行时,其将为应用程序提供查询接口,以便应用程序通过该查询接口传递接口类,并由该查询接口在遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象,进而实现所述实现类所能实现的功能。
本申请的开发设备配备有相关操作系统,例如Window、Mac、Linux、IOS、HMS(鸿蒙)、Android以及其他提供同等功能的操作系统,在此类操作系统的支持下,这些操作系统适应性开发的应用程序也得以在终端设备中正常运行,正是借助这些应用程序的运行,使得终端设备可以实现人机交互、远程交互以及通过远程服务器与其他终端实现各种间接交互。
本申请所称的应用程序,其通称意义是指运行于服务器或终端设备之类的电子设备的应用程序,这些应用程序采用编程的方式实现了本申请的相关技术方案,其程序代码可被以计算机可执行指令的形式保存于计算机能识别的非易失性存储介质中,并被中央处理器调入内存中运行,通过该应用程序在计算机的运行而构造出本申请的相关装置。
本申请所称的代码资源及代码集,用于描述一个实施开发的源码数据,其通过计算机高级语言编写而成,例如Python、Java、C++等,其从逻辑上可以借助if、case之类的转向语句形成多个分支流程,从动作上则可通过执行语句来执行,例如通过执行语句来调用一个方法函数。
本领域技术人员对此应当知晓:本申请的各种方法,虽然基于相同的概念而进行描述而使其彼此间呈现共通性,但是,除非特别说明,否则这些方法都是可以独立执行的。同理,对于本申请所揭示的各个实施例而言,均基于同一发明构思而提出,因此,对于相同表述的概念,以及尽管概念表述不同但仅是为了方便而适当变换的概念,应被等同理解。
请参阅图2,本申请的一种程序注解编译方法,在其典型实施例中,其包括如下步骤:
步骤S11,从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库:
通过从程序的所述代码资源中提取出以所述接口类标识进行注解的所述接口类代码集,及从该代码资源中提取出以所述实现类标识进行注解的一个或多个所述实现类代码集,构成包含所述接口类代码集及实现类代码集的所述汇总源码库。
所述的接口类标识及实现类标识为预先设置的标识,例如,所述接口类标识可设置为@spdtExpect,所述实现类标识可设置为@spdtActual,当所述代码资源中存在以所述接口类标识进行注解的一个或多个所述接口类代码集及以所述实现类标识进行注解的一个或多个所述实现类代码集时,该接口类代码集及实现类代码集将被提取,以构成所述汇总源码库。本领域技术人员可根据实际业务场景灵活设计所述接口类标识及实现类标识的表达式,恕不赘述。
所述的汇总源码库中存在一个或多个所述实现类代码集,各个所述实现类代码集携带有用于表征自身的渠道的渠道注解标识,以便根据各个所述实现类代码集的所述渠道注解标识,过滤不属于目标渠道的实现类代码集,以使根据所述汇总源码库执行编译操作所生成的数据具有针对性,减少数据占用的计算机储存内存。关于所述过滤的执行,请参考后续步骤,本步骤恕不赘述。
所述的目标渠道是指当前程序的代码资源编译所生成的数据所针对的渠道,开发人员可根据实际需求定义当前编译所针对的所述目标渠道,以便编译操作所生成的数据为该目标渠道所需的代码资源,减少代码资源所占用的储存内存。
步骤S12,对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库:
完成所述汇总源码库的构成后,将根据该汇总源码库中所包含的各个所述实现类代码集所携带的所述渠道标识,过滤所述渠注解道标识不为目标渠道标识的一个或多个所述实现类代码集,以生成只包含该目标渠道所属的实现类代码集的所述目标渠道的源码库。
请参阅图3,关于对所述汇总源码库进行目标渠道的过滤操作的具体实施步骤如下:
步骤S121,调用所述汇总源码库,确定预先注解的多个渠道标识中的唯一一个处于被激活状态,将其确定为所述的目标渠道标识:
所述汇总源码库中存在已预先注解的多个所述渠道标识,通过调用该汇总源码库,根据该汇总源码库中唯一一个处于被集合状态的所述渠道标识,将该渠道标识确定为所述汇总源码库中的所述目标渠道标识。
所述汇总源码库中存在多个所述的渠道标识,相应的,该汇总源码库中存在的所述实现类代码集中也存在与各个所述渠道标识相应的实现类代码集,以便并行开发多个渠道的所述实现类代码集及接口类代码集,且通过激活所述渠道标识,设置编译相应的目标渠道所需的所述实现类代码集及接口类代码集所构造的类文件,实现针对相应的目标渠道的功能。
具体的,所述的渠道标识可表达式可为:
@SpdtCurrentFlavor(value=false)
final class渠道internal constructor():SpdtFlavor
所述渠道中编写相应的渠道,例如,针对游戏项目的渠道为GAME(游戏)的标识为:
@SpdtCurrentFlavor(value=false)
final class GAME internal constructor():SpdtFlavor
而所述value用于表示设置渠道标识的状态,当value=true时,该渠道标识为激活状态,当value=false时,该渠道标识为未激活状态,相应的,所述汇总源码库的多个所述渠道标识中只能存在一个为激活状态的渠道标识,以便编译操作只针对一个目标渠道标识进行编译。本领域技术人员可根据实际业务场景设计所述渠道标识的表达式,恕不赘述。
一种实施例中,校验所述汇总源码库中的多个渠道标识的状态,当存在大于一个处于激活状态的所述渠道标识时,将显示用于表征目标渠道大于1的通知消息,并停止该汇总源码库的编译操作。
步骤S122,从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集:
根据所述汇总源码库中的所述目标渠道标识,查询该汇总源码库中的所述实现类代码集,将渠道注解标识的注解参数不与该目标渠道标识相关联的一个或多个所述实现类代码集进行删除。
具体的,所述实现类代码集的所述渠道注解标识的表达式可为:
@SpdtActual(注解参数::class)
所述注解参数中编写相应的渠道,例如,针对游戏项目的注解参数为GAME的渠道注解标识的表达式为:
@SpdtActual(GAME::class)
当所述目标渠道标识不为GAME时,则该实现类代码集将被删除,相应的,若所述目标渠道标识为GAME,则该实现类代码集将保留。
一种实施例中,所述实现类代码集所携带渠道注解标识中可设有一个或多个所述注解参数,当所述实现类代码集所携带渠道注解标识中存在一个所述注解参数时,该实现类代码集为私有实现类,即只针对一个渠道所开发的实现类,当所述实现类代码集所携带渠道注解标识中存在一个以上的所述注解参数时,该实现类代码集为共用实现类,即针对一个以上的渠道所开发的实现类,以实现实现类代码集的复用,提升开发效率。
步骤S123,将被执行删除后的源码库作为所述的目标渠道的源码库:
当遍历所述汇总源码库的所述实现类代码集并删除不属于所述目标渠道的实现类代码集后,将未被删除的所述实现类代码集作为该目标渠道的所述源码库。
步骤S13,基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表:
完成针对所述汇总源码库的过滤操作,并获取所述目标渠道的源码库后,将基于该目标渠道的源码库中的各个所述实现类代码集各自所引用于所述接口类代码集中的接口类,构造用于表征所述实现类代码集与所述接口类之间的映射关系的所述匹配信息表。
一种实施例中,在基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的所述匹配信息表的步骤之前,将校验所述接口类代码集中各个接口类是否均被所述目标渠道的源码库中各个所述实现类代码集所应用,若均存在应用关系,则构造所述匹配信息表,若存在一个或多个不被所述实现类代码集引用的所述接口类,则不构造所述匹配信息表,并生成用于表征存在不引用关系的通知消息,以便针对所述接口类代码集进行修复,防止代码冗余,占用不必要的计算机储存内存空间,且同时可提升所述源码库的构造的应用程序的鲁棒性。
步骤S14,基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象:
完成所述匹配信息表的构造后,将基于该匹配信息表中的所述接口类与所述实现类代码集之间的映射关系,根据预设的所述关联类命名规则创建所述程序中相应的所述类文件。
通过所述的关联类命名规则创建的所述类文件,以便该类文件所属的程序在运行加载该类文件后,通过该类文件提供的所述查询接口,传递该类文件的所述接口类,由该查询接口遵循所述关联类命名规则,查询调用与该接口类相应的实现类的实例化对象。
所述类文件中包含一个所述实现类与其所引用的所述接口类或多个所述实现类与各自所引用的所述接口类,其根据所述关联类命名规则创建所述类文件,以便所述类文件可针对实现应用程序相应的功能。
关于所述类文件被程序运行加载时,请参阅图4,其具体的实施步骤如下:
步骤S141,触发调用一个所述的接口类,向所述查询接口查询该接口类:
所述程序触发调用事件,触发该调用事件所指向的所述类文件调用一个所述接口类,以触发所述查询接口程序查询该接口类。
所述调用事件由程序执行相应的功能所生成,以便响应该调用事件,调用相应的类文件执行该类文件所实现的功能,例如,当所述调用事件由程序执行登录功能所生成时,该调用事件指向实现登录功能的所述类文件,以并实现登录功能。
步骤S142,所述查询接口根据所述关联类命名规则,将所述接口类转换为所述类文件中的实现类:
所述查询接口根据所述接口类,并同时遵循所述关联类命名规则,将该接口类转换为所述类文件中的实现类。
例如,所述查询接口将所述接口类转换为所述类文件中的实现类的表达式可为:
LoginAction loginAction=Spdt.of(LoginAction.class);
其中,LoginAction.class是指遵循所述关联类命名规则所生成的所述类文件,Spdt.of为所述查询接口,该表达式所指向的功能为登录功能,其通过LoginActionloginAction=Spdt.of(LoginAction.class)创建一个应用于登录功能的loginAction对象,进而完成将所述接口类(遵循所述关联类命名规则生成的类文件)LoginAction.class转换为所述实现类loginAction对象。
步骤S143,所述查询接口对所述实现类相应的代码集进行实例化,获得实例化对象:
所述查询接口完成将所述接口类转换为所述类文件中的实现类后,将通过对所述实现类相应的代码集进行实例化,以获取该实现类相应的实例化对象。
参考步骤S142中的表达式,所述实例化的表达式可为:
loginAction.startLogin();
通过所述loginAction对象,并引用应用于开始登陆功能的startLogin()实现类,进而将该实现类进行实例化,获取通过实例化该实现类(startLogin())的实例化对象进行反馈。
步骤S144,所述查询接口将所述实例化对象返回并执行:
所述查询接口完成所述实例化对象后,将该实例化对象返回并执行,以实现相应的功能。
以上的典型实施例及其变化实施例充分揭示了本申请的程序注解编译方法的实施方案,但是,仍可通过对一些技术手段的变换和扩增而演绎出该方法的多种变化实施例,如下概要说明其他实施例:
一种实施例中,请参阅图5,本方法包括如下前置步骤:
步骤S08,获取适用于当前开发工程的渠道标识集合:
当前开发工程开始进行开发时,将获取适用于该开发功能的渠道标识集合,以便通过针对该渠道标识集合包含的各个渠道标识进行开发,使开发工程中的代码资源可适用于各个所述渠道标识所指向的渠道,实现代码资源复用,提升开发效率。
一种实施例中,为每个所述的渠道标识创建对应的代码目录,用于存储相应的渠道标识所需的文件资源或至少部分代码资源,将其添加到与所述目标渠道标识相对应的编译路径中参与编译。
一种实施例中,为所述渠道标识集合中各个所述渠道标识创建各自所属的代码目录,该代码目录用于储存相应的渠道标识所需的文件资源或至少部分代码资源,以便在开发工程的开发过程中调用相应的所述代码目录,以便在编译相应的渠道标识所指向的渠道的所述类文件时,调用该渠道标识所属的所述代码目录进行编译。
步骤S09,为所述渠道标识集合的各个渠道标识创建相对应的注解类信息:
当前开发工程中根据所述渠道标识集合,自动创建该渠道标识集合中各个所述渠道标识的所述注解类信息。
所述注解类信息在开发工程中的表达式可为:
@SpdtCurrentFlavor(value=true)
final class xx internal constructor():SpdtFlavor;
该表达式中,xx是指相应的渠道标识,若所述渠道标识中包含aa、bb、cc的渠道标识时,将为各个所述渠道标识创建各自所属的所述注解类信息,以确定当前开发工程所针对的各个渠道。
步骤S10,修改相对应的注解类信息,将与预先指定的当前编译标识相同的渠道标识的标记为所述的目标渠道标识,将其余渠道标识标记为非目标渠道标识:
当前开发工程通过修改对应的所述注解类信息,确定当前开发工程执行编译时所指定的目标渠道标识,确定所述渠道标识集合中其他的渠道标识为非目标渠道标识。
参考步骤S09中的表达式,当前开发功能可通过表达式中的value值,确定所述目标渠道标识及非目标渠道标识,例如,当相应的注解类信息的value为true时,该注解类信息相应的渠道标识将被确定为所述目标渠道标识,而其余的注解类信息的value为false,以将其余的注解类信息各自所对应的渠道标识确定为所述非目标渠道标识,需要注意的时,所述目标渠道标识为唯一项,以便编译过程只针对一个渠道进行,以执行差异化的编译操作。
进一步,可以通过将上述各实施例所揭示的方法中的各个步骤进行功能化,构造出本申请的一种程序注解编译装置,按照这一思路,请参阅图6,其中的一个典型实施例中,该装置包括:源码库构成单元11、源码库过滤单元12、信息表构造单元13及类文件创建单元14。其中,源码库构成单元11,用于从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库;源码库过滤单元12,用于对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;信息表构造单元13,用于基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表;类文件创建单元14,用于基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象。
一种实施例中,所述源码库过滤单元包括:标识确定模块,用于调用所述汇总源码库,确定预先注解的多个渠道标识中的唯一一个处于被激活状态,将其确定为所述的目标渠道标识;代码过滤模块,用于从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集;源码库确定模块,用于将被执行删除后的源码库作为所述的目标渠道的源码库。
另一种实施例中,所述类文件创建单元包括:接口类查询模块,用于触发调用一个所述的接口类,向所述查询接口查询该接口类;接口类转换模块,用于所述查询接口根据所述关联类命名规则,将所述接口类转换为所述类文件中的实现类;实例化模块,用于所述查询接口对所述实现类相应的代码集进行实例化,获得实例化对象;对象返回模块,用于所述查询接口将所述实例化对象返回并执行。
为解决上述技术问题,本申请实施例还提供一种计算机设备,用于运行根据所述程序注解编译方法所实现的计算机程序。具体请参阅图7,图7为本实施例计算机设备基本结构框图。
如图7所示,计算机设备的内部结构示意图。该计算机设备包括通过系统总线连接的处理器、非易失性存储介质、存储器和网络接口。其中,该计算机设备的非易失性存储介质存储有操作系统、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种程序注解编译方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种程序注解编译方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本实施方式中处理器用于执行本发明的程序注解编译装置的各个模块/子模块的具体功能,存储器存储有执行上述模块所需的程序代码和各类数据。网络接口用于向用户终端或服务器之间的数据传输。本实施方式中的存储器存储有程序注解编译装置中执行所有模块/子模块所需的程序代码及数据,服务器能够调用服务器的程序代码及数据执行所有子模块的功能。
本申请还提供一种非易失性存储介质,所述的程序注解编译方法被编写成计算机程序,以计算机可读指令的形式存储于该存储介质中,计算机可读指令被一个或多个处理器执行时,意味着该程序在计算机中的运行,由此使得一个或多个处理器执行上述任一实施例程序注解编译方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
综上所述,本申请构建了一种多渠道差异化编译功能,通过注解标识注解相应的渠道,实现只针对目标渠道所需的代码资源进行编译,同时实现了多渠道复用同一代码资源的功能,有助于提升软件项目的开发效率。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本技术领域技术人员可以理解,本申请中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本申请中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本申请中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (10)

1.一种程序注解编译方法,其特征在于,包括如下步骤:
从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库;
对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;
基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表;
基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象。
2.根据权利要求1所述的方法,其特征在于,对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库的步骤,包括:
调用所述汇总源码库,确定预先注解的多个渠道标识中的唯一一个处于被激活状态,将其确定为所述的目标渠道标识;
从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集;
将被执行删除后的源码库作为所述的目标渠道的源码库。
3.根据权利要求2所述的方法,其特征在于,从该源码库中查找并删除各个实现类代码集所对应的渠道注解标识中的注解参数不属于所述目标渠道标识的实现类代码集的步骤中,所述实现类代码集所对应的渠道注解标识中的注解参数,包括一个或多个,分别用于描述单个渠道标识所拥有的私有实现类或多个渠道标识共同拥有的共用实现类。
4.根据权利要求2所述的方法,其特征在于,基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表的步骤之前,包括:
校验所述目标渠道源码库中是否均存在与其中的接口类相对应的实现类代码集,若均存在则通过校验以执行后续步骤,否则中止编译并告警。
5.根据权利要求1至4中任意一项所述的方法,其特征在于,通过向该类文件提供的接口传递接口类,由该接口遵循所述关联类命名规则而根据接口类查询调用与该接口类该类文件中相应的实现类的步骤,包括:
触发调用一个所述的接口类,向所述查询接口查询该接口类;
所述查询接口根据所述关联类命名规则,将所述接口类转换为所述类文件中的实现类;
所述查询接口对所述实现类相应的代码集进行实例化,获得实例化对象;
所述查询接口将所述实例化对象返回并执行。
6.根据权利要求1至4中任意一项所述的方法,其特征在于,包括如下前置步骤:
获取适用于当前开发工程的渠道标识集合;
为所述渠道标识集合的各个渠道标识创建相对应的注解类信息;
修改相对应的注解类信息,将与预先指定的当前编译标识相同的渠道标识的标记为所述的目标渠道标识,将其余渠道标识标记为非目标渠道标识。
7.根据权利要求6所述的方法,其特征在于,包括如下步骤:
为每个所述的渠道标识创建对应的代码目录,用于存储相应的渠道标识所需的文件资源或至少部分代码资源,将其添加到与所述目标渠道标识相对应的编译路径中参与编译。
8.一种程序注解编译装置,其特征在于,其包括:
源码库构成单元,用于从所述程序的代码资源中提取出以接口类标识进行注解的接口类代码集和由实现类标识进行注解的实现类代码集,构成汇总源码库;
源码库过滤单元,用于对所述汇总源码库进行过滤,滤除其中未以目标渠道标识进行注解的实现类代码集,获得目标渠道的源码库;
信息表构造单元,用于基于所述目标渠道的源码库,构造表征所述接口类与其实现类的代码集之间的映射关系的匹配信息表;
类文件创建单元,用于基于所述匹配信息表中的接口类与实现类之间的映射关系,根据预设的关联类命名规则创建所述程序中相应的类文件,以便在所述程序运行加载该类文件后,通过向该类文件提供的查询接口传递接口类,由该查询接口遵循所述关联类命名规则查询调用与该接口类相应的实现类的实例化对象。
9.一种电子设备,包括中央处理器和存储器,其特征在于,所述中央处理器用于调用运行存储于所述存储器中的计算机程序以执行如权利要求1至7中任意一项所述的方法的步骤。
10.一种非易失性存储介质,其特征在于,其以计算机可读指令的形式存储有依据权利要求1至7中任意一项所述的方法所实现的计算机程序,该计算机程序被计算机调用运行时,执行相应的方法所包括的步骤。
CN202110170870.3A 2021-02-08 2021-02-08 程序注解编译方法及其相应的装置、设备、介质 Pending CN112817600A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110170870.3A CN112817600A (zh) 2021-02-08 2021-02-08 程序注解编译方法及其相应的装置、设备、介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110170870.3A CN112817600A (zh) 2021-02-08 2021-02-08 程序注解编译方法及其相应的装置、设备、介质

Publications (1)

Publication Number Publication Date
CN112817600A true CN112817600A (zh) 2021-05-18

Family

ID=75863791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110170870.3A Pending CN112817600A (zh) 2021-02-08 2021-02-08 程序注解编译方法及其相应的装置、设备、介质

Country Status (1)

Country Link
CN (1) CN112817600A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI774469B (zh) * 2021-07-12 2022-08-11 瑞昱半導體股份有限公司 程式編譯管理系統與其作業方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI774469B (zh) * 2021-07-12 2022-08-11 瑞昱半導體股份有限公司 程式編譯管理系統與其作業方法

Similar Documents

Publication Publication Date Title
CN110297689B (zh) 智能合约执行方法、装置、设备及介质
CN111061678B (zh) 业务数据处理方法、装置、计算机设备和存储介质
CN110928548B (zh) 一种数据处理方法以及设备
CN111143446A (zh) 数据对象的数据结构转换处理方法、装置及电子设备
US20230259358A1 (en) Documentation enforcement during compilation
WO2024002299A1 (zh) 应用管理方法、应用订阅方法及相关设备
KR20110080448A (ko) 애플리케이션 구축 시스템 및 그 방법
CN111369237A (zh) 一种数据处理方法、装置及计算机存储介质
CN112817600A (zh) 程序注解编译方法及其相应的装置、设备、介质
CN112764756A (zh) 软件资源编译方法及其相应的装置、设备、介质
CN115129740B (zh) 一种云原生环境下的分布式微服务数据库更新方法及系统
CN112199092B (zh) 应用的开发方法、装置及电子设备
CN112328598B (zh) Id生成方法、装置、电子设备及存储介质
CN112711602B (zh) 一种存储过程的运行方法、装置,数据库系统及存储介质
CN114490694A (zh) 一种业务规则处理方法、装置、服务器及存储介质
CN106570143B (zh) 一种发送响应对象的方法和装置
CN114691309A (zh) 一种批量业务处理系统、方法及装置
CN114268540B (zh) 规则引擎的优化方法、装置及设备
CN113032010B (zh) 命令的传输控制方法、终端及计算机可读存储介质
CN115630090B (zh) 一种任务状态转换系统
CN116737399A (zh) 分布式锁实现方法、装置、计算机设备和存储介质
CN113886428A (zh) 基于业务方法的动态sql的生成方法及装置
CN114528353A (zh) 提供区块链服务的方法和装置
CN115237446A (zh) 文件数据更新方法及其装置、设备、介质、产品
CN113672309A (zh) 一种业务服务方法、装置、电子设备以及可读存储介质

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