CN116700827A - 一种枚举类数据的加载方法、装置及介质 - Google Patents
一种枚举类数据的加载方法、装置及介质 Download PDFInfo
- Publication number
- CN116700827A CN116700827A CN202310667181.2A CN202310667181A CN116700827A CN 116700827 A CN116700827 A CN 116700827A CN 202310667181 A CN202310667181 A CN 202310667181A CN 116700827 A CN116700827 A CN 116700827A
- Authority
- CN
- China
- Prior art keywords
- class
- data
- enumeration
- data structure
- name
- 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
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 78
- 238000000034 method Methods 0.000 claims abstract description 64
- 238000004806 packaging method and process Methods 0.000 claims abstract description 8
- 238000005516 engineering process Methods 0.000 claims abstract description 7
- 238000004891 communication Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 5
- 230000015654 memory Effects 0.000 description 31
- 230000006870 function Effects 0.000 description 18
- 238000013461 design Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 8
- 244000046052 Phaseolus vulgaris Species 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000011161 development Methods 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 238000012423 maintenance Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000012550 audit Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005538 encapsulation Methods 0.000 description 2
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 102100039250 Essential MCU regulator, mitochondrial Human genes 0.000 description 1
- 101000813097 Homo sapiens Essential MCU regulator, mitochondrial Proteins 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及计算机技术领域,尤其涉及一种枚举类数据的加载方法、装置及介质。该方法可以包括:扫描指定路径下多个类名,得到第一数据结构;第一数据结构包括至少两个类名;指定路径是预先配置好的,或是服务器获取的,类名是指定路径下存储的枚举类数据的类名;基于第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;指定枚举类数据的类名是至少两个类名中的任一个;基于简单类名和带完整路径的类名,向第二数据结构中加载指定枚举类数据;将加载完成的第二数据结构封装为接口。这样,由于需要请求接口的数量变少,节约了项目请求接口的时间;就可以有效的缩短项目的启动时间。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种枚举类数据的加载方法、装置及介质。
背景技术
用户在使用电子设备启动项目(如,网页、应用程序)时,项目的前端会向后端,获取一些枚举类数据,以实现前端对这些枚举类数据的展示、交互功能。在一些方案中,当项目需要多种定义的枚举类数据时;后端需要为每种定义的枚举类数据加载一个接口;这样一个接口就会对应一种定义的枚举类数据。这样,前端通过请求上述接口,就可以获取到该接口对应的定义的枚举类数据。
在这些方案中,由于接口和枚举类数据的定义是一一对应的关系。因此,对于一些枚举类数据的定义(类别)比较多的项目,前端在获取枚举类数据时,需要请求大量的接口;这就会导致项目的启动时间比较长,比较浪费时间。
发明内容
有鉴于此,本申请提供一种枚举类数据的加载方法、装置及介质,可以将多个不同定义的枚举类数据加载到少量接口,甚至是一个接口之中,可以节约项目的启动时间。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种枚举类数据的加载方法,该方法可以应用于服务器或电子设备。该方法可以包括:扫描指定路径下多个类名,得到第一数据结构;第一数据结构包括至少两个类名;指定路径是预先配置好的,或是服务器(电子设备)获取的,类名是指定路径下存储的枚举类数据的类名;基于第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;指定枚举类数据的类名是至少两个类名中的任一个;基于简单类名和带完整路径的类名,向第二数据结构中加载指定枚举类数据;将加载完成的第二数据结构封装为接口。其中,加载完成可以理解为,在指定路径下,与第一数据结构中类名相同的枚举类数据已经全部加载到了第二数据结构之中。
这样,对于一些枚举类类别比较多的项目,就可以通过请求少量甚至一个接口,就可以获得项目启动所需要的多个类别的枚举类数据。同时,由于需要请求接口的数量变少,节约了项目请求接口的时间;就可以有效的缩短项目的启动时间。
在第一方面的一种可能的设计中,上述基于第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名,可以包括:在第一数据结构不为空的情况下,从第一数据结构中包括的类名中随机选择一个类名作为指定类名,并从第一数据结构中删除指定类名;获取指定枚举类数据的简单类名和带完整路径的类名;指定枚举类数据的类名是指定类名
这样,服务器或电子设备就可以准确且快速的将指定路径下的枚举类数据加载到第二数据结构之中。
在第一方面的一种可能的设计中,上述第二数据结构是键值对数据结构;向述第二数据结构中加载指定枚举类数据,可以包括:将简单类名加载到第二数据结构的键中。
在第一方面的一种可能的设计中,指定枚举类数据包括名称和值,第二数据结构的值是子数据结构,子数据结构是键值对数据结构;向第二数据结构中加载指定枚举类数据,还可以包括:将指定枚举类数据的名称加载到子数据结构的键中,将指定枚举类数据的值加载到子数据结构的值中。
在第一方面的一种可能的设计中,在扫描指定路径下多个类名之前,该方法还可以包括:响应于项目启动命令,加载系统类。
这样,服务器或电子设备就可以通过一些以及配置好的系统类,更加便捷的获取数据、加载数据。可以进一步地缩短项目的启动时间。
在第一方面的一种可能的设计中,扫描指定路径下多个类名,包括:扫描指定路径下多个类名,并将扫描指定路径下多个类名,封装为InitializingBean接口类的afterPropertiesSet方法。
这样,在服务器或电子设备加载了系统类之后,就可以自动的去扫描到指定路径下枚举类数据的类名。可以进一步的提升本申请提供的枚举类数据加载方法的便捷程度,可以进一步的缩短项目的启动时间。
在第一方面的一种可能的设计中,将指定枚举类数据的名称加载到子数据结构的键中,将指定枚举类数据的值加载到子数据结构的值中,包括:通过JAVA反射技术,将指定枚举类数据的名称加载到子数据结构的键中;通过JAVA反射技术,将指定枚举类数据的值加载到子数据结构的值中。
这样,服务器或电子设备就可以快速并且精准地将枚举类数据的名称和值加入到子数据结构之中。
第二方面,本申请提供一种枚举类数据加载装置,该装置包括:
数据扫描模块,数据扫描模块被配置为,扫描指定路径下多个类名,得到第一数据结构;第一数据结构包括至少两个类名;指定路径是预先配置好的,或是服务器获取的,类名是指定路径下存储的枚举类数据的类名;数据获取模块,数据获取模块被配置为,基于第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;指定枚举类数据的类名是至少两个类名中的任一个;数据加载模块,数据加载模块被配置为,基于简单类名和带完整路径的类名,向第二数据结构中加载指定枚举类数据;接口封装模块,接口封装模块被配置为,将加载完成的第二数据结构封装为接口。
第三方面,本申请提供了一种枚举类数据加载装置,该装置包括:处理器和通信接口;通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的枚举类数据加载方法。
第四方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当指令在终端上运行时,使得终端执行如第一方面和第一方面的任一种可能的实现方式中描述的枚举类数据加载方法。
第五方面,本申请实施例提供一种包含指令的计算机程序产品,当计算机程序产品在枚举类数据加载装置上运行时,使得枚举类数据加载装置执行如第一方面和第一方面的任一种可能的实现方式中所描述的枚举类数据加载方法。
第六方面,本申请实施例提供一种芯片,芯片包括处理器和通信接口,通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的枚举类数据加载方法。
具体的,本申请实施例中提供的芯片还包括存储器,用于存储计算机程序或指令。
其中,第二方面至第六方面中任一种设计方式所带来的技术效果可参见上述第一方面中不同设计方式所带来的技术效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种数据加载方法的流程示意图;
图2为本申请实施例提供的一种枚举类数据加载系统示意图;
图3为本申请实施例提供的一种枚举类数据加载方法的流程示意图;
图4为本申请实施例提供的又一种枚举类数据加载方法的流程示意图;
图5为本申请实施例提供的一种枚举类数据加载方法原理示意图;
图6为本申请实施例提供的一种枚举类数据加载装置的结构示意图;
图7为本申请实施例提供的另一种枚举类数据加载装置的结构示意图;
图8为本申请实施例提供的一种芯片的结构示意图。
具体实施方式
为了方面理解本申请实施例提供的技术方案,首先给出本申请相关技术术语的简要介绍。简要介绍如下:
1.枚举类数据
枚举类数据指的是一种特殊类型的数据,它在代码中定义了一组常量值,每个常量值都具有唯一的名称和对应的数值。枚举类数据通常用于表示一组固定的选项或状态,例如星期几、性别、颜色等。它相比于使用普通的数字或字符串表示数据更加直观和安全,可以防止出现意料之外的取值。在程序中使用枚举类数据可以提高代码的可读性和可维护性。
在一些编程语言中(例如,JAVA)中枚举类数据(下文可简称为枚举类)可以用于将一组有限的值作为一组常量来使用。枚举类通常用于代表状态、选项和类别等具有离散值的变量。
通常,枚举类数据可以应用于一些有限且固定的类;例如四季、星期、性别等等。
2.前端、后端
前端(Front-end)可以理解为网站或应用程序(application,APP)的用户界面(User Interface,UI)和用户交互部分,是用户可以直接看到和操作的部分,包括网页的布局、样式、交互效果、动画等。
后端(Back-end)可以理解为网站或应用程序的服务器端部分。后端需要从客户端接收请求,处理逻辑,查询数据库、生成报表、发送邮件等各种服务,并将结果返回给客户端。
3.接口
接口(Interface)是一种约定,它定义了类或对象应该具有的方法、属性或事件,但并不提供实现细节。具体实现由实现接口的类或对象来完成,这样就实现了代码的解耦和更好的可扩展性。接口通常是在一组相关的类或对象之间共享行为或功能时使用,它提供了一种规范化的方法来实现这些类或对象之间的交互。
4.定义
定义可以理解为对数据、变量、函数、类、接口等进行明确的声明和规定,包括变量的数据类型、函数的参数和返回值,类的属性和方法,接口的函数定义等。通过定义,程序才能正确地识别并运用这些名称和数据类型,避免出现编译或运行错误。定义是编程中的基础,可以帮助开发者创建可读性强、易于维护和升级的代码。
示例性的,可以通过枚举类数据的类别来定义枚举类数据。例如,将枚举类数据1(男性、女性)定义为用户性别,将枚举类数据2(儿童、青年、壮年、老年)定位为用户年龄,将枚举类数据3(草稿、审批中、审批结束、审批通过)定义为审核状态等等。
下面结合附图对本申请实施例提供的枚举类数据加载方法、装置及介质进行详细地描述。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请的说明书以及附图中的术语“第一”和“第二”等是用于区别不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。
此外,本申请的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
用户在使用电子设备启动项目(如打开网页、启动APP)。网页(APP)的前端(下文可简称为前端)会从网页(APP)的后端(下文可简称为后端)获取一些枚举类数据,以实现前端对这些枚举类数据的展示、交互功能(如,下拉列表的展示与交互、可选项的展示与交互等等)。通常,前端会通过调用后端提供的接口的方式,来获取枚举类数据。该枚举类数据是由后端定义的,前端只需要向该接口发送预设的请求信息,就看可以获取该接口中被加载的枚举类数据。
在一些方案中,当网页(APP)具有多个不同定义(类别)的枚举类数据需求时;后端需要将每个定义的枚举类数据加载到接口之中,这样一个接口就会对应一个定义的枚举类数据。之后,前端通过请求上述每个接口,就可以获取到每个接口对应的枚举类数据。
示例性的,参见图1,项目的后端可以通过下述步骤1-步骤4将枚举类数据加载到接口之中。
步骤1、后端创建地图(Map)数据结构;该Map数据结构可以用于接收后端返回的枚举类数据。
步骤2、后端获取枚举类数据的地址。
步骤3、基于该地址,遍历该地址下同一定义的枚举类数据,并将遍历得到的枚举类数据加入到上述的Map数据结构中。
步骤4、将该Map数据封装为接口。
这样,在前端通过预设的指令信息向该接口请求枚举类数据时,该接口就可以返回通过上述方式加载的枚举类数据。当项目需要多个定义(类型,类别)的枚举类数据时,就需要通过这种方式为每个接口加载枚举类数据。
可以理解的,在这些方案中,由于接口和枚举类数据的定义(类型,类别)是一一对应的关系。因此对于一些枚举类数据类型比较多的项目(APP、网页)中,在前端获取枚举类数据时,需要请求大量的接口,这样比较耗时。同时,对于这些项目的开发者来讲,开发以及后期维护大量接口会比较耗时,会降低工作效率,浪费工作时间。
有鉴于此,本申请提供一种枚举类数据的加载方法,可以将多个定义(类别、类型)的枚举类数据加载到少量接口,甚至是一个接口中。这样,前端就可以只通过请求少量,甚至是一个接口,来获取该项目所需的全部(或部分)枚举类数据,可以有效地减少前端加载枚举类数据时请求接口的次数,进而可以减少项目在运行前的启动时间。同时,对于项目的开发、维护者来讲,只需要对一个接口进行开发以及维护,可以有效的提升工作效率,节约工作时间。
图2为可适用于本申请实施例提供的枚举类数据加载系统示意图。在图2所示的系统中,包括至少以一个电子设备100和至少一个服务器200,二者建立通信连接。电子设备100可以通过通信网络(如互联网)与服务器200建立通信连接。其中,电子设备可以是,手机、电脑、个人计算机、笔记本电脑、车载电脑、平板电脑、智能可穿戴设备等可以具有网页访问功能或使用应用程序(application,APP)能力的电子设备;服务器可以是,异构服务器、云服务器、集群服务器等等,可以为电子设备提供后台服务能力的服务器。
在图2所描述的系统中,用户可以通过电子设备100去使用项目(如,网页、APP)。在项目的启动过程中,项目的后端会通过本申请实施例提供的枚举类数据加载方法,将枚举类数据加载到一个接口中。之后,项目的前端请求该后端的该接口就可以获取到枚举类数据。示例性的,项目的前端部分可以位于电子设备100,项目的后端部分可以位于服务器200。需要说明的是,图2仅为本申请可以使用的场景的一种示意图,并不构成对本申请提供的技术方案的适用场景的限定
以下将在图2中所示的枚举数据加载系统中,以项目是网页,且网页的前端位于电子设备100,且网页的后端位于服务器200为例对本申请实施例提供的枚举类数据加载方法进行详细介绍。如图3所示,该方法可以包括步骤S101-S104。
S101、服务器扫描指定路径下枚举类数据的类名,得到第一数据结构。该第一数据结构包括上述类名。
上述指定路径,可以是预先配置好的指定路径。也可以是服务器从网页启动命令中解析出的指定路径。在该指定路径下,存储了一些预先配置好的枚举类数据的类名、名称和值。示例性的,假设指定路径为AAA/BBBB,在该路径下存储了,一些类名为“用户性别”的枚举类数据;这些枚举类数据包括:名称(name)为“男性”,值(value)为0;name为“女性”,value为1。又示例性的,假设指定路径为AAA/CCCC,该路径下存储了一些类名为“用户年龄”的枚举类数据;这些枚举类数据可以包括:名称为“儿童”,值为0;名称为“青年”,值为1;名称为“壮年”,值为2;名称为“老年”,值为3。又示例性的,假设指定路径为AAA/DDDD,该路径下存储了一些类名为“审核状态”的枚举类数据;这些枚举类数据可以包括:名称为“草稿”,值为0;名称为“审批中”,值为1;名称为“审批结束”,值为2;名称为“审批通过”,值为3。
上述第一数据结构,可以为键值对(key-value,KV)数据结构,例如,Map数据结构。上述第一数据结构可以理解为,一个具有该路径下所有枚举类数据类别的清单。在一些实施例中,假设指定路径为AAA,则得到的第一数据结构中可以包括上述“用户年龄”、“审核状态”、“用户性别”三个类别。在一些实施例中,假设指定路径为AAA/CCCC,则得到的第一数据结构中可以包括:“用户年龄”。
在一些实施例中,服务器可以通过遍历指定路径下的枚举类数据的类名的方式来得到第一数据结构。例如,可以通过遍历关键字(例如,Enum)的方式来得到指定路径下的枚举类数据的类名,并将遍历得到的类名加入到第一数据结构之中。
在一些实施例中,在上述步骤S101之前,本申请提供的枚举类数据加载方法还可以包括:
步骤S100、服务器响应于项目启动命令(如,网页启动命令),加载系统类。其中,网页启动命令,可以为用户在电子设备上触发的打开网页命令。也可以为,电子设备向服务器发送的打开网页消息等等。本申请对网页启动命令的形式不做任何限制。这样,在加载了系统类之后,就可以直接调用系统类中已经定义好的一些函数、工具等等。这样,可以有效的节约本申请实施例提供的枚举类数据加载方法中后续步骤的运行时间。可以进一步的提升本申请提供的枚举类数据加载方法的便捷程度,可以进一步的缩短项目的启动时间。
其中系统类,也可以被称为System类,可以代表当前JAVA程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。示例性的,System类中提供了一些系统级的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()等等。
在一些实施例中,在加载了系统类之后,在上述步骤S101还可以包括:将扫描指定路径下枚举类数据的类名,封装为InitializingBean接口类的afterPropertiesSet方法。
其中,初始化Bean(InitializingBean)是Spring提供的拓展性接口,InitializingBean接口为bean提供了属性初始化后的处理方法,它具有有一个afterPropertiesSet方法,凡是继承该接口的类,在bean的属性初始化(InitializingBean)后都会执行该方法。其中初始化Bean的步骤可以由上述加载系统类的步骤中执行。
Spring是一个轻量级开源框架,可以用来解决企业级编程开发中的复杂性,可以实现敏捷开发的应用型框架。Spring是一个开源容器框架,它可以集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。
这样,在服务器加载了系统类之后,服务器就可以自动的基于加载的系统类,执行上述步骤S101。
S102、服务器基于第一数据结构,获取指定类名下的枚举类数据的简单类名和带完整路径的类名。
其中,上述指定类名为上述第一数据结构包括的类名。上述指定类名下的枚举类数据,可以理解为,该枚举类数据的类名与上述指定类名相同。
在一些实施例中,服务器可以通过遍历指定类名的方式来得到枚举类数据的简单类名和带完整路径的类名。
示例性的,假设指定类名为用户性别,则指定类名下的枚举类数据为,枚举类数据1A(0,“男性”),枚举类数据1B(1,“女性”),枚举类数据1A和枚举类数据1B的简单类名可以为性别(例如,可以代码化为SexEnum)。示例性的,上述枚举类数据1A和枚举类数据1B的带完整路径的类名可以代码化的记为:com.unicom.enums.SexEnum。
又示例性的,假设指定类名为用户年龄,则指定类名下的枚举类数据可以为,枚举类数据2A(0,儿童)、枚举类数据2B(1,青年)、枚举类数据2C(2,壮年)和枚举类数据2D(3,老年)。枚举类数据2A、枚举类数据2B、枚举类数据2C、枚举类数据2D的简单类名可以为年龄(例如,可以代码化为AgeEnum)。示例性的,枚举类数据2A、枚举类数据2B、枚举类数据2C和枚举类数据2D的待完整路径的类名可以代码化的记为:com.unicom.enums.AgeEnum。
S103、服务器基于上述简单类名和上述具有完整路径的类名,向第二数据结构中加载枚举类数据。
该枚举类数据可以是上述完整路径下的枚举类数据。例如,带完整路径的类名为:com.unicom.enums.SexEnum。则,向第二数据结构中加载的枚举类数据可以为上述枚举类数据1A,枚举类数据1B。又例如,带完整路径的类名为:com.unicom.enums.AgeEnum。则,向第二数据结构中加载的枚举类数据可以为上述枚举类数据2A、枚举类数据2B、枚举类数据2C和枚举类数据2D。
其中,第二数据结构可以是KV数据结构,且每一个第二数据结构均可以包括子数据结构,子数据结构也可以是KV数据结构。该子数据结构可以作为第二数据结构中的值。示例性的,上述第二数据结构、子数据结构均可以为MAP数据结构。
在一些实施例中,在服务器第一次向第二数据结构中加载枚举类数据的情况下,服务器还可以执行初始化第二数据结构的步骤。例如,服务器可以在初始化第二数据结构时,定义第二数据结构的类型(例如,Map)、以及为第二数据结构分配存储空间等等。
在一些实施例中,在服务器向第二数据结构中加载枚举类数据时,可以将该枚举类数据的简单类名,加载到(作为)该第二数据结构的键,并将该枚举类数据的名称和值加载到该第二数据结构的子数据结构中。示例性的,可以将枚举类数据的名称加载到子数据结构的键,将枚举类数据的值加载到子数据结构的值。也可以将枚举类数据的名称加载到子数据结构的值,将枚举类数据的值加载到子数据结构的键。
示例性,假设简单类名为:AgeEnum,带完整路径的类名为:com.unicom.enums.AgeEnum。则,基于简单类名和具有完整路径的类名加载得到的第二数据结构可以如下:
Map<AgeEnum,Map<0,儿童>>;
Map<AgeEnum,Map<1,青年>>;
Map<AgeEnum,Map<2,壮年>>;
Map<AgeEnum,Map<3,老年>>。
其中,AgeEnum可以理解为第二数据结构的键,子数据结构“Map<0,儿童>”可以理解为第二数据结构的值。同样的,AgeEnum可以理解为第二数据结构的键,子数据结构“Map<1,青年>”可以理解为第二数据结构的值。同样的,AgeEnum可以理解为第二数据结构的键,子数据结构“Map<2,壮年>”可以理解为第二数据结构的值。同样的,AgeEnum可以理解为第二数据结构的键,子数据结构“Map<3,老年>”可以理解为第二数据结构的值。
可以理解的,上述第二数据结构仅为第二数据结构的一种可能的示例性的表示方式,在实际应用中还可以具有其他的表示方式;例如,使用符号“()”替换上述的符号“<>”等等。本领域技术人员可以根据实际的使用需要,对第二数据结构的表示方式进行设计,本申请实施例对第二数据结构的表示方式不做任何限制。
示例性,假设某些枚举类数据的类名为,User_Age或User_Sex,则其简单类名为:AgeEnum或SexEnum;其带完整路径的类名为:com.unicom.enums.AgeEnum和com.unicom.enums.SexEnum。则,基于简单类名和具有完整路径的类名加载得到的第二数据结构可以如下:
Map<AgeEnum,Map<0,儿童>>;
Map<AgeEnum,Map<1,青年>>;
Map<AgeEnum,Map<2,壮年>>;
Map<AgeEnum,Map<3,老年>>;
Map<SexEnum,Map<0,男性>>;
Map<SexEnum,Map<1,女性>>。
在一些实施例中,服务器可以通过JAVA反射技术中的getName方法和/或getValue方法获取枚举类数据的名称和值;并将枚举类数据的名称和值加载到子数据结构之中。示例性的,可以将枚举类数据的名称加载到子数据结构的键,将枚举类数据的值加载到子数据结构的值。也可以将枚举类数据的名称加载到子数据结构的值,将枚举类数据的值加载到子数据结构的键。这样,服务器就可以快速并且精准地将枚举类数据的名称和值加入到子数据结构之中。
其中,JAVA反射(reflection)机制(技术)是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为JAVA语言的反射机制。
在一些实施例中,服务器可以循环执行步骤S102和S103,直至,与第一数据结构包括的类名相同的枚举类数据全部加载至第二数据结构。可以理解的,对于一个项目来讲,在不同的开发阶段,枚举类数据会有变化,枚举类会有更新。因此本申请实施例,先通过类别,将枚举类数据通过第一数据结构进行预加载;之后再基于第一数据结构,将指定路径下存储的枚举类数据全部加载到第二数据结构之中,这样可以有效地保证将指定路径下的枚举类数据全部加载到第二数据结构中,可以避免枚举类数据加载缺失的问题。
在一些实施例中,参见图4,当服务器循环执行上述步骤S102和S103时;上述步骤S102可以为S102A、S102B和S102C;步骤S103可以为S103A。
S102A、判断上述第一数据结构是否为空。
若不为空,则执行S102B;若为空,则结束循环,执行后续步骤。
S102B、从第一数据结构包括的类名中随机选择一个类名作为指定类名,并从上述第一数据结构中删除该指定类名。
S102C、获取该指定类名下枚举类数据的简单类名和带完整路径的类名。
S103A、基于上述简单类名和具有完整路径的类名,向第二数据结构中加载枚举类数据;并在加载完成后返回S102A。
这样,服务器就可以准确,且快速的将指定路径下全部的枚举类数据全部加载到第二数据结构之中。
S104、服务器将第二数据结构封装为接口。
这样,服务器就可以响应于电子设备的请求,向电子设备发送上述第二数据结构中的数据。其中,该请求可以为预先配置的针对该端口的请求。例如,可以为:http://localhost:8080/dataManage/test/enums/。这样服务器就可以向电子设备发送上述第二数据结构中全部的枚举类数据。
基于此,对于一些枚举类类别比较多的项目,就可以通过请求少量甚至一个接口,就可以获得项目启动所需要的多个类别的枚举类数据。同时,由于需要请求接口的数量变少,节约了项目请求接口的时间;就可以有效的缩短项目的启动时间。同时,对于项目的开发、维护者来讲,只需要对一个接口进行开发以及维护,可以有效的提升工作效率,节约工作时间。
在一些实施例中,也可以预先配置好的一些子请求,以使得服务器可以响应于这些子请求向电子设备发送上述第二数据结构中的部分枚举类数据。例如,子请求可以为:
http://localhost:8080/dataManage/test/enums/SexEnum。当服务器接收到上述子请求时,就可以在第二数据结构中,搜索简单类名为“SexEnum”的枚举类数据,并将这些枚举类数据发送给电子设备。
在一些实施例中,在电子设备接收到了上述服务器发送的枚举类数据之后,电子设备可以通过接收到的枚举类数据对网页进行渲染。例如,可以对网页的下拉框部分进行渲染,也可以对网页的可选项部分进行渲染。
示例性的,假设电子设备接收到了上述枚举类数据1、枚举类数据2和枚举类数据3。参见图5,电子设备100可以通过onload(正在加载)方法,基于上述三个枚举类数据502对网页501的下拉框进行渲染。
本申请实施例可以根据上述方法示例对枚举类数据加载装置进行功能模块或者功能单元的划分,例如,可以对应各个功能划分各个功能模块或者功能单元,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块或者功能单元的形式实现。其中,本申请实施例中对模块或者单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
如图6所示,为本申请实施例提供的一种枚举类数据加载装置的结构示意图,该枚举类数据加载装置600包括:
数据扫描模块601,数据扫描模块被配置为,扫描指定路径下多个类名,得到第一数据结构;第一数据结构包括至少两个类名;指定路径是预先配置好的,或是服务器获取的,类名是指定路径下存储的枚举类数据的类名;
数据获取模块602,数据获取模块被配置为,基于第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;指定枚举类数据的类名是至少两个类名中的任一个;
数据加载模块603,数据加载模块被配置为,基于简单类名和带完整路径的类名,向第二数据结构中加载指定枚举类数据;
接口封装模块604,接口封装模块被配置为,将加载完成的第二数据结构封装为接口。
在通过硬件实现时,本申请实施例中的接口封装模块604可以集成在通信接口上,数据扫描模块601可以集成在处理器上。具体实现方式如图7所示。
图7示出了上述实施例中所涉及的枚举类数据加载装置的又一种可能的结构示意图。该枚举类数据加载装置包括:处理器302和通信接口303。处理器302用于对枚举类数据加载装置的动作进行控制管理,例如,执行上述数据扫描模块601执行的步骤,和/或用于执行本文所描述的技术的其它过程。通信接口303用于支持枚举类数据加载装置与其他网络实体的通信,例如,执行上述接口封装模块604执行的步骤。枚举类数据加载装置还可以包括存储器301和总线304,存储器301用于存储枚举类数据加载装置的程序代码和数据。
其中,存储器301可以是枚举类数据加载装置中的存储器等,该存储器可以包括易失性存储器,例如随机存取存储器;该存储器也可以包括非易失性存储器,例如只读存储器,快闪存储器,硬盘或固态硬盘;该存储器还可以包括上述种类的存储器的组合。
上述处理器302可以是实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。该处理器可以是中央处理器,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。该处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线304可以是扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线304可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
图8是本申请实施例提供的芯片170的结构示意图。芯片170包括一个或两个以上(包括两个)处理器1710和通信接口1730。
可选的,该芯片170还包括存储器1740,存储器1740可以包括只读存储器和随机存取存储器,并向处理器1710提供操作指令和数据。存储器1740的一部分还可以包括非易失性随机存取存储器(non-volatile random access memory,NVRAM)。
在一些实施方式中,存储器1740存储了如下的元素,执行模块或者数据结构,或者他们的子集,或者他们的扩展集。
在本申请实施例中,通过调用存储器1740存储的操作指令(该操作指令可存储在操作系统中),执行相应的操作。
其中,上述处理器1710可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,单元和电路。该处理器可以是中央处理器,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,单元和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
存储器1740可以包括易失性存储器,例如随机存取存储器;该存储器也可以包括非易失性存储器,例如只读存储器,快闪存储器,硬盘或固态硬盘;该存储器还可以包括上述种类的存储器的组合。
总线1720可以是扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线1720可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得该计算机执行上述方法实施例中的枚举类数据加载方法。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得该计算机执行上述方法实施例所示的方法流程中的枚举类数据加载方法。
其中,计算机可读存储介质,例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、寄存器、硬盘、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合、或者本领域熟知的任何其它形式的计算机可读存储介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于特定用途集成电路(Application Specific Integrated Circuit,ASIC)中。在本申请实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本发明的实施例提供一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行如图2至图4中所述的枚举类数据加载方法。
由于本发明的实施例中的枚举类数据加载装置、计算机可读存储介质、计算机程序产品可以应用于上述方法,因此,其所能获得的技术效果也可参考上述方法实施例,本发明实施例在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种枚举类数据的加载方法,其特征在于,所述方法包括:
扫描指定路径下多个类名,得到第一数据结构;所述第一数据结构包括至少两个类名;所述指定路径是预先配置的,所述类名是所述指定路径下存储的枚举类数据的类名;
基于所述第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;所述指定枚举类数据的类名是所述至少两个类名中的任一个;
基于所述简单类名和所述带完整路径的类名,向所述第二数据结构中加载指定枚举类数据;
将加载完成的所述第二数据结构封装为接口。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名,包括:
在所述第一数据结构不为空的情况下,从所述第一数据结构中包括的类名中随机选择一个类名作为指定类名,并从所述第一数据结构中删除所述指定类名;
获取指定枚举类数据的简单类名和带完整路径的类名;所述指定枚举类数据的类名是指定类名。
3.根据权利要求1或2所述的方法,其特征在于,所述第二数据结构是键值对数据结构;所述向述第二数据结构中加载指定枚举类数据,包括:
将所述简单类名加载到所述第二数据结构的键中。
4.根据权利要求3所述的方法,其特征在于,所述指定枚举类数据包括名称和值,所述第二数据结构的值是子数据结构,所述子数据结构是键值对数据结构;所述向所述第二数据结构中加载指定枚举类数据,还包括:
将所述指定枚举类数据的名称加载到所述子数据结构的键中,将所述指定枚举类数据的值加载到子数据结构的值中。
5.根据权利要求4所述的方法,其特征在于,在所述扫描指定路径下多个类名之前,所述方法还包括:
响应于项目启动命令,加载系统类。
6.根据权利要求5所述的方法,其特征在于,所述扫描指定路径下多个类名,包括:
扫描指定路径下多个类名,并将扫描指定路径下多个类名,封装为InitializingBean接口类的afterPropertiesSet方法。
7.根据权利要求6所述的方法,其特征在于,所述将所述指定枚举类数据的名称加载到所述子数据结构的键中,将所述指定枚举类数据的值加载到子数据结构的值中,包括:
通过JAVA反射技术,将所述指定枚举类数据的名称加载到所述子数据结构的键中;
通过JAVA反射技术,将所述指定枚举类数据的值加载到子数据结构的值中。
8.一种枚举类数据加载装置,其特征在于,所述装置包括:
数据扫描模块,所述数据扫描模块被配置为,扫描指定路径下多个类名,得到第一数据结构;所述第一数据结构包括至少两个类名;所述指定路径是预先配置好的,或是所述服务器获取的,所述类名是所述指定路径下存储的枚举类数据的类名;
数据获取模块,所述数据获取模块被配置为,基于所述第一数据结构,获取指定枚举类数据的简单类名和带完整路径的类名;所述指定枚举类数据的类名是所述至少两个类名中的任一个;
数据加载模块,所述数据加载模块被配置为,基于所述简单类名和所述带完整路径的类名,向所述第二数据结构中加载指定枚举类数据;
接口封装模块,所述接口封装模块被配置为,将加载完成的所述第二数据结构封装为接口。
9.一种枚举类数据加载装置,其特征在于,所述装置包括:处理器和通信接口;所述通信接口与所述处理器耦合,所述处理器用于运行计算机程序或指令,以实现如权利要求1-7任一项中所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当计算机执行该指令时,该计算机执行上述权利要求1-7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310667181.2A CN116700827A (zh) | 2023-06-06 | 2023-06-06 | 一种枚举类数据的加载方法、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310667181.2A CN116700827A (zh) | 2023-06-06 | 2023-06-06 | 一种枚举类数据的加载方法、装置及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116700827A true CN116700827A (zh) | 2023-09-05 |
Family
ID=87836829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310667181.2A Pending CN116700827A (zh) | 2023-06-06 | 2023-06-06 | 一种枚举类数据的加载方法、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700827A (zh) |
-
2023
- 2023-06-06 CN CN202310667181.2A patent/CN116700827A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
US9928038B2 (en) | Dynamically building locale objects or subsections of locale objects based on historical data | |
CN109062563B (zh) | 用于生成页面的方法和装置 | |
CN110673839B (zh) | 分布式工具配置化构建生成方法及系统 | |
CN106569880B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
CN113885849B (zh) | 基于工业互联网平台的应用开发方法、装置及终端设备 | |
US9141353B2 (en) | Dynamically building locale objects at run-time | |
CN113987337A (zh) | 基于组件化动态编排的搜索方法、系统、设备及存储介质 | |
CN110083366B (zh) | 应用运行环境的生成方法、装置、计算设备及存储介质 | |
CN111813385B (zh) | 一种基于Web应用的页面插件化方法、装置及设备 | |
CN115269040B (zh) | 一种租户业务应用的拓展方法、装置及系统 | |
CN116700827A (zh) | 一种枚举类数据的加载方法、装置及介质 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
CN117009397A (zh) | 数据查询方法、数据查询装置、电子设备和存储介质 | |
CN113626001A (zh) | 一种基于脚本的api动态编排方法及装置 | |
CN113434582A (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
CN117311799B (zh) | 一种软件项目页面的配置方法 | |
CN114138507B (zh) | Python程序服务化方法、装置及计算机可读存储介质 | |
CN111506301B (zh) | 绕过系统限制反射调用的方法及相关设备 | |
CN116700745A (zh) | 基于容器云平台的应用部署方法、装置、电子设备和介质 | |
CN113900742A (zh) | 应用实例的管理方法、装置、电子设备及存储介质 | |
CN114721929A (zh) | 测试方法、装置、存储介质及设备 | |
US9778917B2 (en) | Dynamically building subsections of locale objects at run-time | |
CN117908971A (zh) | 基于微内核系统的设备资源管理方法、装置、设备和介质 | |
CN117170640A (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 |