具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
一般在Java开发过程中,会使用很多的配置文件,但是不同配置文件在形式上和格式上可能各不相同,该配置文件为某一个功能应用的参数集合,如同一个excel文件,可能对于不同系统具有不同格式的参数集合,使得多个系统之间不能共用该excel文件的配置文件,需要对该excel文件的配置文件进行进一步处理,极大地降低了工作效率。
由此,本发明实施例提供了一种基于spring(一种轻量级开源框架) 的资源加载方法,通过调用spring中的预设接口中的预定义函数以操作 spring中的bean对象得到资源配置内容的位置,进一步通过预定义的抽象类根据资源配置内容的位置获取资源配置的内容,并将获取的资源配置内容反射入bean对象中,由bean对象具体实现。由此可见,本方案通过统一的方式对资源配置内容进行加载,以使得资源配置内容的格式统一,提高了工作效率。
本发明实施例提供的一种基于spring的资源加载方法及装置均应用于终端设备,该终端设备可以是,但不限于,手机、平板电脑等智能电子设备。请参照图1,是本发明实施例提供的一种终端设备100的结构示意图,该终端设备100包括基于spring的资源加载装置110、存储器120、存储控制器130、处理器140、外设接口150、输入输出单元160、音频单元170以及显示单元180。
所述存储器120、存储控制器130、处理器140、外设接口150、输入输出单元160、音频单元170、显示单元180各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述基于spring的资源加载装置110包括至少一个可以软件或固件(firmware) 的形式存储于所述存储器120中或固化在所述终端设备100的操作系统(operating system,OS)中的软件功能模块。所述处理器140用于执行存储器120中存储的可执行模块,例如所述基于spring的资源加载装置110包括的软件功能模块或计算机程序。
其中,存储器120可以是,但不限于,随机存取存储器 (Random Access Memory,RAM),只读存储器(Read Only Memory, ROM),可编程只读存储器(Programmable Read-Only Memory, PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器120 用于存储程序,所述处理器140在接收到执行指令后,执行所述程序,后续本发明实施例任一实施例揭示的流过程定义的终端设备100所执行的方法可以应用于处理器140中,或者由处理器140实现。
处理器140可能是一种集成电路芯片,具有信号的处理能力。上述的处理器140可以是通用处理器,包括中央处理器 (Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器140也可以是任何常规的处理器140等。
所述外设接口150将各种输入/输出装置耦合至处理器140以及存储器120。在一些实施例中,外设接口150,处理器140以及存储控制器130可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
输入输出单元160用于提供给用户输入数据实现用户与所述终端设备100的交互。所述输入输出单元160可以是,但不限于,鼠标和键盘等。
音频单元170向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。
显示单元180在终端设备100与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示单元180可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器140进行计算和处理。
请参照图2,是本发明实施例提供的一种基于spring的资源加载方法的流程示意图,该基于spring的资源加载方法包括:
步骤S110,调用自定义扩展类以实现预设接口的业务流程,所述预设接口中包含预定义函数。
该spring中注册了预设接口,该预设接口为InstantiationAwareBeanPostProcessor。该spring具有多个bean对象,当通过getBean(beanName)方法向spring请求一个bean对象时,即在bean 对象实例化之前,需调用预设接口中的预定义函数以对bean对象进行操作,以使bean对象实例化。
由于预设接口只是注册于spring中,对于spring而言仅仅是一个抽象的标识。为了调用spring中的预设接口,需对该预设接口进行具体实现。该预设接口的具体实现方式为:调用自定义扩展类实现预设接口的业务流程,如
classStaticInjectProcessorextendsInstantiationAwareBeanPostProcessorAdapte r{},则通过调用自定义扩展类StaticInjectProcessor以实现预设接口的业务流程,同时该自定义扩展类中还包括预设接口的预定义函数,该预定义函数为ObjectpostProcessAfterInitialization(Object bean,String beanName)。通过调用自定义扩展类以实现了预设接口的业务流程,使得spring可以通过预设接口内的预定义函数对bean对象进行操作。
步骤S120,对所述自定义扩展类配置唯一标识和位置,以便于spring 对所述自定义扩展类进行查找。
在步骤S110中通过调用自定义扩展类以实现了预设接口,为了使得 spring能够查找到自定义扩展类,还需对自定义扩展类分配唯一标识和位置,以便于spring能够根据该自定义扩展类的唯一标识和位置查找到该自定义扩展类,以进一步调用该预设接口的预定义函数对bean对象进行操作。具体通过<bean id=”staticInjectProcessor”class=”StaticInjectProcessor” />对自定义扩展类进行定义,其中id为该自定义扩展类staticInjectProcessor的唯一标识,该class为该自定义扩展类的staticInjectProcessor的位置。程序具体运行时,spring将分析出该自定义扩展类staticInjectProcessor为预设接口的实现类,则将调用该自定义扩展类中的预定义函数,即预设接口的预定义函数,Object postProcessAfterInitialization(Object bean,String beanName),对bean对象进行处理。
步骤S130,调用处理bean对象的预定义函数。
即是spring获取自定义扩展类后,调用自定义扩展类中的预定义函数 ObjectpostProcessAfterInitialization(Object bean,String beanName)对bean 对象进行处理。
步骤S140,根据所述预定义函数获取bean对象的注解属性,所述注解属性包括属性名称和注解内容,所述注解内容包括资源配置的类型和资源配置的位置。
该spring调用预定义函数后,将在预定义函数中对资源配置内容进行读取,为了获取资源配置内容,需首先获取bean对象的注解属性,该注解属性包括属性名称和注解内容。其中,bean对象根据实现的功能不同,具有多个不同种类的属性名称,如若bean对象为实现一个游戏功能,则该bean对象可能包括的属性名称为技能、等级等。若需要对bean对象的某一个属性名称进行加载资源,则需对该属性名称进行注解,经过注解之后将得到该属性名称对应的注解内容,该注解内容包括资源配置的类型和资源配置的位置。在本发明实施例中,采用自定义注解的方式对需加载资源的属性名称进行注解,其自定义注解的方式为:@interface ResourceField {String type()default"excel"String value()default"";},其中,type表示资源配置的类型,value表示资源配置的位置,此时通过ResourceField对该属性名称进行注解,用于表征该属性名称需要加载资源。
在本发明实施例中,根据预定义函数获取bean对象的注解属性的流程具体参照图3,是本发明实施例提供的步骤S140的子步骤的流程示意图,该步骤S140包括:
步骤S141,获取bean对象的所有属性名称。
通过Java发射功能获取bean对象的所有属性名称,存放在集合 propertyList中。
步骤S142,查找所有属性名称中的所有注解内容。
遍历集合propertyList中的每一个属性名称,获取每一个属性名称的注解内容,存放于annotationList列表中。
步骤S143,选取所有注解内容中的具有特定标识的注解内容。
若annotationList列表中的注解内容存在ResourceField这个特定标识,则选取该注解内容,该注解内容包括资源配置的类型和资源配置的位置。需要说明的是,本发明实施例通过ResourceField特定标识标注需要加载资源的属性名称,还可以通过其他特定标识进行标记,在本发明实施例中,该特定标识起标识作用。
步骤S144,获取所述具有特定标识的注解内容对应的属性名称以及所述具有特定标识的注解内容共同构成注解属性。
即该注解属性包括属性名称以及该属性名称对应的注解内容,并分别将属性名称和属性名称对应的注解内容保存为临时变量,在本发明实施例中,属性名称用变量beanProperty表示,属性名称对应的注解内容用变量 beanAnnotation表示。
步骤S150,根据所述资源配置的位置获取资源配置内容并将资源配置内容加载入预定义抽象类。
由于资源配置文件有很多配置项,每个配置项都有一个唯一的标识,且每个配置项都是“属性名称:值”的形式,需要说明的是,可以该配置项理解为一种数据形式,如“年龄:23”,该资源配置文件则可以理解为多个配置项的集合,可以为表格等文件。此外,该资源配置文件可以加载、更新、读取数据,现有技术中,正是由于该资源配置文件的格式不统一导致配置文件在不同系统中不能共用,因此,对该资源配置文件定义一个预定义抽象类,通过该预定义抽象类对资源对象(用于对资源配置文件进行操作)进行了一个抽象,以通过在预定义抽象类中对资源配置内容进行加载达到对资源配置文件本身进行更改的目的。该预定义抽象类的定义为: class ResourceConf{CONF_TYPE;list<Conf>confs;load(String confLocation,String confType);update();readOne();readAll()}。
在步骤S140中通过获取bean对象的注解属性,进而获取了资源配置的位置。由于在预定义抽象类中定义了load(String confLocation,String confType)方法,其中confLocation表示资源配置的位置,confType表示资源配置的类型,则通过Java调用该方法根据资源配置的位置获取资源配置的内容。
此外,根据步骤S140中获取的注解属性的资源配置的类型,进一步根据该资源配置的类型加载该资源配置的内容入预定义抽象类中,该资源配置的类型可以为excel,json,csv这三个值,其中,excel为由Microsoft 为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件,json(JavaScript Object Notation,JS对象标记)为一种轻量级的数据交换格式,csv(Comma-Separated Values)为逗号分隔值,有时也称为字符分隔值,其文件以纯文本形式存储表格数据。在本发明实施例中,以 excel文件为例说明如何加载资源配置内容入预定义抽象类中,其余类型的配置资源也采用相同的方式进行加载。
假设excel文件的格式如下:
Title |
columnA |
columnB |
columnC |
columnD |
Content |
valueA1 |
valueB1 |
valueC1 |
valueD1 |
|
valueA2 |
valueB2 |
ValueC2 |
valueD2 |
|
… |
… |
… |
… |
其中title为表头,“columnA,content”的组合共同构成属性名称,该属性名称对应的值为“valueA1”,其余“属性:值”的组合形式以此类推得到,依次将获取的“属性:值”的多个组合存储于预定义的抽象类的列表中。
步骤S160,将预定义的抽象类中加载的资源配置内容反射入bean对象对应的属性名称中。
在步骤S150中将获取的资源配置内容均加载入了预定义的抽象类中,需进一步将预定义的抽象类中加载的资源配置内容反射入bean对象中,由bean对象进行执行,以使资源配置内容进行实际运行。
由此可见,本方案提供的一种基于spring的资源加载方法,通过定义一个预定义抽象类将资源配置文件进行抽象化,并实现spring中注册的预设接口,使得spring调用预设接口中的预定义函数对bean对象进行操作得到注解内容,并根据注解内容中的资源配置的位置获取资源配置内容后注入预定义抽象类中,由预定义抽象类将资源配置内容反射于bean对象执行,以实现加载的资源格式统一,提高了工作效率。
请参照图4,是本发明实施例提供的一种基于spring的资源加载装置 110的功能模块示意图,该基于spring的资源加载装置110包括第二调用模块111、配置模块112、第一调用模块113、获取模块114、加载模块115、反射模块116。
第二调用模块111,用于调用自定义扩展类以实现预设接口的业务流程,所述预设接口中包含预定义函数。
在本发明实施例中,步骤S110可以由第二调用模块111执行。
配置模块112,用于对所述自定义扩展类配置唯一标识和位置,以便于spring对所述自定义扩展类进行查找。
在本发明实施例中,步骤S120可以由配置模块112执行。
第一调用模块113,用于调用处理bean对象的预定义函数。
在本发明实施例中,步骤S130可以由第一调用模块113执行。
获取模块114,用于根据所述预定义函数获取bean对象的注解属性,所述注解属性包括属性名称和注解内容,所述注解内容包括资源配置的类型和资源配置的位置。
在本发明实施例中,步骤S140可以由获取模块114执行。
加载模块115,用于根据所述资源配置的位置获取资源配置内容并将所述资源配置内容加载入预定义的抽象类。
在本发明实施例中,步骤S150可以由加载模块115执行。
反射模块116,用于将预定义的抽象类中加载的资源配置内容反射入 bean对象对应的属性名称中。
在本发明实施例中,步骤S160可以由反射模块116执行。
由于在基于spring的资源加载方法部分已经详细描述,在此不再赘述。
本发明实施例还揭示了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器140执行时实现本发明实施例提供的基于 spring的资源加载方法。
综上所述,本发明实施例提供了一种基于spring的资源加载方法、装置、终端设备及计算机可读存储介质,该基于spring的资源加载方法及装置应用于终端设备,该计算机可读存储介质为终端设备的一部分。该基于 spring的资源加载方法包括:调用处理bean对象的预定义函数,根据所述预定义函数获取bean对象的注解属性,所述注解属性包括属性名称和注解内容,所述注解内容包括资源配置的类型和资源配置的位置。根据资源配置的位置获取资源配置内容并将资源配置内容加载入预定义的抽象类,进而将预定义的抽象类中加载的资源配置内容反射入bean对象对应的属性名称中,以使bean对象执行资源配置内容。通过本方案实现了对资源配置内容的统一加载,以保证了资源配置内容的格式统一。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。