CN102566992A - 一种基于系统运行的依赖注入方法及装置 - Google Patents
一种基于系统运行的依赖注入方法及装置 Download PDFInfo
- Publication number
- CN102566992A CN102566992A CN2010105938778A CN201010593877A CN102566992A CN 102566992 A CN102566992 A CN 102566992A CN 2010105938778 A CN2010105938778 A CN 2010105938778A CN 201010593877 A CN201010593877 A CN 201010593877A CN 102566992 A CN102566992 A CN 102566992A
- Authority
- CN
- China
- Prior art keywords
- traffic performance
- allocation list
- properties example
- configuration information
- record
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种基于系统运行的依赖注入方法,包括:根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息;根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息;根据获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。本发明实施例还公开了一种基于系统运行的依赖注入装置。采用本发明,可在系统运行时动态改变注入的特性实例,保证系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性。
Description
技术领域
本发明涉及依赖注入技术领域,尤其涉及一种基于系统运行的依赖注入方法及装置。
背景技术
依赖注入(Dependency Injection,DI),又叫做控制反转(Inversion of Control, IoC),是一个重要的利用面向对象编程的法则来削减计算机程序的耦合问题的技术。依赖注入技术主要以Sping框架(一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架)为代表,Sping框架提供了属性注入、构造函数注入与工厂方法注入三种依赖注入方式。Spring的依赖注入技术采用XML(Extensible Markup Language,可扩展标记语言)配置文件或Java注解的方式进行注入配置,其中,采用XML配置文件进行注入配置,只需要修改XML配置文件就可以改变注入的值,其操作较为简单;而采用Java注解的方式进行注入配置时,需要修改Java代码并重新编译与发布,其操作较为复杂;因此,Spring的依赖注入技术中广泛采用XML配置文件进行注入配置。
Sping的依赖注入主要是面向接口编程,具体的特性实例(实现类)在业务级系统运行时通过注入的方式注入,提供给系统调用。请参见图1,为现有的Spring的依赖注入的结构示意图;HelloWorld接口包括两个特性实例:CnHelloWorldImpl和EnHelloWorldImpl,如果系统运行时需要使用CnHelloWorldImpl,则按照下面的方式将CnHelloWorldImpl注入:
<bean id="cnHelloWorld"
class=" CnHelloWorldImpl ">
</bean>
<bean id="helloWorldAction" class=" HelloWorldAction "> <property name="helloWorld"> <ref local="cnHelloWorld"/> </property> </bean>
通过上述方式,CnHelloWorldImpl的特性实例(特性bean)被注入到系统中运行。如果系统要求某一场景或某段时间使用CnHelloWorldImpl,要求另一场景或另一时间使用EnHelloWorldImpl,则此时修改上述的配置文件中的local值来实现。由于Spring的XML配置文件是预先配置好并存储于Jar(Java Avchive,Java归档文件)包中的,且Jar包一般位于系统运行平台之外,对该配置文件进行修改,需要首先退出系统平台,进入Jar包进行配置修改,然后再重新启动应用服务器。
综上,发明人发现,虽然现有的Spring的依赖注入功能较为强大,但其无法在系统运行时动态改变注入的特性实例,并不适用存在大量业务特性的业务系统,实用性较低。
发明内容
本发明实施例所要解决的技术问题在于,提供一种基于系统运行的依赖注入方法及装置,可在系统运行时动态改变注入的特性实例,保证系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性。
为了解决上述技术问题,本发明实施例提供了一种基于系统运行的依赖注入方法,包括:
根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息;
根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息;
根据获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
其中,所述根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息之前,还包括:
预先设定业务特性配置表和特性实例配置表,并建立所述业务特性配置表和所述特性实例配置表的映射关系;其中,所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应。
其中,所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述;所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;其中,所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称;所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
其中,所述业务特性包括:定时任务;所述预先设定业务特性配置表和特性实例配置表之前,还包括:将定时任务配置文件中的群组节点配置为业务特性。
其中,所述从业务特性配置表中获得所述业务特性的配置信息之后,所述从特性实例配置表中获取与所述业务特性的配置信息对应的特性实例的配置信息之前,还包括:
根据获得的所述业务特性的配置信息,判断所述业务特性的业务特性类型值是否为非零值;
如果判断结果为是,则根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息。
相应地,本发明实施例还提供了一种基于系统运行的依赖注入装置,包括:
第一获取单元,用于根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息;
第二获取单元,用于根据所述第一获取单元获得的所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息;
依赖注入单元,用于根据所述第二获取单元获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
其中,所述装置还包括:存储单元,用于存储预先设定的业务特性配置表和特性实例配置表,并存储预先建立的所述业务特性配置表和所述特性实例配置表的映射关系;其中,所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应。
其中,所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述;所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;其中,所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称;所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
其中,所述业务特性包括:定时任务;所述装置还包括:配置单元,用于将定时任务配置文件中的群组节点配置为业务特性。
其中,所述装置还包括:判断单元,用于根据所述第一获取单元获得的所述业务特性的配置信息,判断所述业务特性的业务特性类型值是否为非零值;如果判断结果为是,则通知所述第二获取单元获取对应的特性实例的配置信息。
实施本发明实施例,具有如下有益效果:
1、本发明实施例根据系统运行所需的业务特性,从业务特性配置表中获得业务特性的配置信息,并根据预设的业务特性配置表与特性实例配置表的映射关系,获得相应的特性实例的配置信息,并进一步获得特性实例,并实例所述业务特性,将实例化后的业务特性注入系统运行,本发明实施例根据系统的运行需求动态改变注入的特性实例,保证了系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性;
2、本发明实施例将定时任务配置文件中的群组节点配置为业务特性,既可根据系统的运行需求动态启动定时任务,又实现了对定时任务的依赖注入,使本发明实施例基于系统运行的依赖注入方案更适用于存在大量业务特性的业务系统。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有的Spring的依赖注入的框架结构示意图;
图2为本发明的基于系统运行的依赖注入装置的第一实施例的结构示意图;
图3为本发明的基于系统运行的依赖注入装置的第二实施例的结构示意图;
图4为本发明的基于系统运行的依赖注入装置的框架结构示意图;
图5为本发明的基于系统运行的依赖注入方法的第一实施例的流程图;
图6为本发明的基于系统运行的依赖注入方法的第二实施例的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图2,为本发明的基于系统运行的依赖注入装置的第一实施例的结构示意图;所述装置包括:
第一获取单元10,用于根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息。
若系统运行时需要应用到某特性实例时,业务调用类则向特性实例(特性bean)工厂(FeatureBeanFactory)接口发送请求,所述第一获取单元10则根据所述特性bean工厂接口接收到的请求,从业务特性配置表中获得系统运行所需的业务特性的配置信息。所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述。
第二获取单元20,用于根据所述第一获取单元10获得的所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息。
所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称。所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应,进一步,所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
依赖注入单元30,用于根据所述第二获取单元20获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
如前述,所述第二获取单元20获取的所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称。其中,特性实例标识(bean id)与特性实例一一对应,因此,所述依赖注入单元30根据bean id可确定系统运行所需的特性实例,同时,根据特性实例的接口名称(Java bean接口名称)获得相应的特性实例,并实例化所述业务特性,然后将所述实例化后的业务特性注入到系统当前运行程序中供系统运行。
本发明实施例根据系统运行所需的业务特性,从业务特性配置表中获得业务特性的配置信息,并根据预设的业务特性配置表与特性实例配置表的映射关系,获得相应的特性实例的配置信息,并进一步获得特性实例,并实例所述业务特性,将实例化后的业务特性注入系统运行,本发明实施例根据系统的运行需求动态改变注入的特性实例,保证了系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性。
请参见图3,为本发明的基于系统运行的依赖注入装置的第二实施例的结构示意图;与上一实施例相同,所述装置包括:第一获取单元10、第二获取单元20和依赖注入单元30。本实施例中,可选地,所述装置还包括:
存储单元40,用于存储预先设定的业务特性配置表和特性实例配置表,并存储预先建立的所述业务特性配置表和所述特性实例配置表的映射关系。
所述装置预先设定业务特性配置表,所述业务特性配置表是用来定义系统的业务特性的表,如下表:
表一:Feature_Config
上表为业务特性配置表的一个实施例,说明如下:
根据上述说明表,可以得到表一所示的实施例中的业务特性的配置信息为:业务特性类型为“SIMS_DISN_SWITCH”,业务特性类型值为“1”,业务特性类型描述为“是否需要DISN加载SP和业务的环节配置”。具体实现中,若业务特性类型值(Feature_Value)为0,则表示系统具备这个业务特性,需要运行所述业务特性;若业务特性类型值(Feature_Value)为非零值(如1),则表示系统不具备这个业务特性,不需要运行所述业务特性。
所述装置预先设定特性实例配置表,所述特性实例配置表是用来表征系统的业务特性与Spring中定义的特性实例(特性bean)的映射关系,如下表:
表二:Featurebean
上表为特性实例配置表的一个实施例,说明如下:
根据上述说明表,可以得到表二所示的实施例中的特性实例的配置信息为:特性bean类型为“SIMS_DISN_SWITCH”,特性bean类型值为“1”,特性bean标识为:featureBeanDao,特性bean类型描述为“接入管理用于DISN改造的特性实例(实现类)”,特性bean的接口名称为:feature。
所述装置预先建立所述业务特性配置表和特性实例配置表的映射关系,二者的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应,进一步,所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。上述表一与表二的映射关系为:当表一中的Feature_Value为非零(如1)时,表一中的Feature_Type与表二中的Feature_Type一一对应,即可根据表一中的Feature_Type,从表二中查找到相同的Feature_Type的记录,比如:表一中的Feature_Value为1,则表明系统需要DISN加载SP和业务的环节配置,此时,根据表一中Feautre_Type为SIMS_DISN_SWITCH,则从表二查找Feautre_Type为SIMS_DISN_SWITCH的记录,如表二的实施例所示,该记录即为系统运行DISN加载SP和业务的环节配置时需要用到的特性bean的配置信息,根据表二中的该条记录中的Spring中的bean ID,可确定该特性bean,通过特性功能的Java接口名称,调用特性bean实例化该业务特性,并将实例化后的业务特性注入到系统中运行。
优选地,所述存储单元40为一数据库,用于存储上述表一、表二及相应说明,以及表一与表二的映射关系。可以理解的是,此处所述存储单元40为数据库仅为举例,其还可以通过XML文件或文本文件等,以用于存储上述表一、表二及相应说明,以及表一与表二的映射关系,此类情况下可类似分析,在此不赘述。
配置单元50,用于将定时任务配置文件中的群组节点配置为业务特性。
具体实现中,系统运行所需的业务特性还包括定时任务,一般地,企业级业务系统会经常使用定时任务(quartz框架)来完成一些既定的任务,当系统部署在多个站点时,某个或某些站点需要执行某定时任务,而某个站点或某些站点不需要执行某定时任务。现有的Spring的依赖注入主要采用以下三种解决方法,其一为:在定时任务中增加if else代码,通过这种硬编码的方式决定要不要在该站点执行这个定时任务;这种方法如果要增加一个站点就需要修改代码增加if else语句,可扩展性较差;其二为:对每个站点建立一个配置文件;这种方法会存在大量的重复性配置,不利于维护;其三为:系统在部署时就人工修改相应的配置文件;这种方法是人工修改,容易出现差错,若忘记修改则会导致严重后果,且这种方法预先配置好相应的文件,因此在系统运行时,需要首先修改配置,然后重启应用服务器,无法在系统运行时动态启动定时任务。考虑到现有Spring的依赖注入的上述问题,本发明实施例将定时任务与依赖注入集成,即可应用本发明的依赖注入方案对站点的定时任务进行动态启动,所述配置单元50,则用于将定时任务配置文件中的群组节点(group)配置为业务特性。
具体地,所述配置单元50在编写定时任务的quartz_jobs.xml 配置文件时,将group配置为业务特性,如将<group>配置为</group>;具体示例如下:
<job>
<job-detail>
<name>testJob1</name>
<group>SIMS_DISN_SWITCH</group>
<job-class>com.aspire.doms.util.DumbJob</job-class>
<volatility>false</volatility>
<durability>false</durability>
<recover>false</recover>
<job-data-map allows-transient-data="true">
<entry>
<key>test1</key>
<value>test1</value>
</entry>
<entry>
<key>test2</key>
<value>test2</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>testTrigger1</name>
<group>testJobs</group>
<job-name>testJob1</job-name>
<job-group>testJobs</job-group>
<!-- <start-time>2003-12-17 2:15:00 pm</start-time> -->
<!-- <end-time>2013-12-17 2:15:00 pm</end-time> -->
<cron-expression>0 0/1 * ? * *</cron-expression>
<!-- every 30 seconds... -->
</cron>
</trigger>
</job>
所述配置单元50配置完成后,即实现了定时任务与业务特性的集成,当系统运行到某站点时,第一获取单元10首先根据上述表一获取业务特性的配置信息,若所述业务特性的配置信息中的Feature_Value为0,则表示该站点没有这个业务特性,即该站点不需要执行该定时任务;若所述业务特性的配置信息中的Feature_Value为非零值(如1),则表示该站点有这个业务特性,即该站点需要执行该定时任务。
请一并参见图4,为本发明的基于系统运行的依赖注入装置的框架结构示意图;经所述配置单元50配置完成后,结合本发明实施例的依赖注入框架,可实现多站点的定时任务过滤,根据系统运行时动态启动定时任务。可以理解的是,所述配置单元50对定时任务配置文件中的group节点进行配置仅为举例,其他情况,比如:通过增加新的XML节点来实现配置,或使用除group节点来实现配置,上述情况下可类似分析,在此不赘述。
判断单元60,用于根据所述第一获取单元10获得的所述业务特性的配置信息,判断所述业务特性的业务特性类型值是否为非零值;如果判断结果为是,则通知所述第二获取单元20获取对应的特性实例的配置信息。
具体实现中,如前述,所述判断单元60用于判断所述第一获取单元10根据上述表一获取的业务特性的配置信息的Feature_Value值是否为0,若为0,则表示系统没有此业务特性,不需要执行该定时任务,此时,则忽略该业务特性,系统继续运行;若所述第一获取单元10根据上述表一获取的业务特性的配置信息的Feature_Value值为非零值(如1),则表示系统有这个业务特性,需要执行该定时任务,则通知所述第二获取单元20获取对应的特性实例的配置信息,最后由依赖注入单元30将实例化后的业务特性注入到系统中运行。可以理解的是,若所述业务特性为定时任务时,可类似分析,在此不赘述。
本发明实施例将定时任务配置文件中的群组节点配置为业务特性,既可根据系统的运行需求动态启动定时任务,又实现了对定时任务的依赖注入,使本发明实施例基于系统运行的依赖注入方案更适用于存在大量业务特性的业务系统。
需要说明的是,本发明实施例的基于系统运行的依赖注入装置可以为建立在Spring Ioc容器之上的融合了业务特性的依赖注入框架。
为了更清楚的说明本发明,下面将对本发明的基于系统运行的依赖注入装置所执行的依赖注入方法进行详细介绍。
请参见图5,为本发明的基于系统运行的依赖注入方法的第一实施例的流程图;所述方法包括:
S101,根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息。
若系统运行时需要应用到某特性实例时,业务调用类则向特性实例(特性bean)工厂(FeatureBeanFactory)接口发送请求,所述S101则根据所述特性bean工厂接口接收到的请求,从业务特性配置表中获得系统运行所需的业务特性的配置信息。所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述。
S102,根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息。
所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称。所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应,进一步,所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
S103,根据获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
如前述,所述S102获取的所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称。其中,特性实例标识(bean id)与特性实例一一对应,因此,所述S103根据bean id可确定系统运行所需的特性实例,同时,根据特性实例的接口名称(特性功能的Java接口名称)获得相应的特性实例,并实例化所述业务特性,然后将所述实例化后的业务特性注入到系统当前运行程序中供系统运行。
本发明实施例根据系统运行所需的业务特性,从业务特性配置表中获得业务特性的配置信息,并根据预设的业务特性配置表与特性实例配置表的映射关系,获得相应的特性实例的配置信息,并进一步获得特性实例,并实例化所述业务特性,将实例化后的业务特性注入系统运行,本发明实施例根据系统的运行需求动态改变注入的特性实例,保证了系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性。
请参见图6,为本发明的基于系统运行的依赖注入方法的第二实施例的流程图;所述方法包括:
S201,将定时任务配置文件中的群组节点配置为业务特性。
具体实现中,所述S201是由基于系统运行的依赖注入装置中的配置单元所执行的,其具体的配置过程在此不赘述。
S202,预先设定业务特性配置表和特性实例配置表,并建立所述业务特性配置表和所述特性实例配置表的映射关系。
具体实现中,所述S202预先设定业务特性配置表如上表一、特性实例配置表如上表二,以及建立表一和表二的映射关系,具体的设定和建立过程在此不赘述。其中,所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述;所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;其中,所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称;所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
S203,根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息。
本实施例中,所述S203与上一实施例的S101步骤相同,在此不赘述。
S204,判断所述业务特性的业务特性类型值是否为非零值;若判断结果为是,则转入S205;否则,结束。
具体实现中,所述S204判断所述S203根据上述表一获取的业务特性的配置信息的Feature_Value值是否为非零值,若判断其为非零值(如1),则表示系统有这个业务特性,需要执行该定时任务,则转入执行S205;所述S204判断所述S203根据上述表一获取的业务特性的配置信息的Feature_Value值为0,则表示系统没有此业务特性,不需要执行该定时任务,此时,则忽略该业务特性,系统继续运行,依赖注入的流程转入结束。
S205,根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息。
S206,根据获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
本实施例中,所述S205-S206与上一实施例的S102-S103步骤相同,在此不赘述。
本发明实施例将定时任务配置文件中的群组节点配置为业务特性,既可根据系统的运行需求动态启动定时任务,又实现了对定时任务的依赖注入,使本发明实施例基于系统运行的依赖注入方案更适用于存在大量业务特性的业务系统。
通过上述实施例的描述,本发明实施例根据系统运行所需的业务特性,从业务特性配置表中获得业务特性的配置信息,并根据预设的业务特性配置表与特性实例配置表的映射关系,获得相应的特性实例的配置信息,并进一步获得特性实例,并实例化所述业务特性,将实例化后的业务特性注入系统运行,本发明实施例根据系统的运行需求动态改变注入的特性实例,保证了系统(调用者)与特性实例(实现类)之间的松耦合关系,提升Spring的依赖注入的实用性。本发明实施例将定时任务配置文件中的群组节点配置为业务特性,既可根据系统的运行需求动态启动定时任务,又实现了对定时任务的依赖注入,使本发明实施例基于系统运行的依赖注入方案更适用于存在大量业务特性的业务系统。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (10)
1.一种基于系统运行的依赖注入方法,其特征在于,包括:
根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息;
根据所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息;
根据获取的所述特性实例的配置信息,实例化所述业务特性,将实例化后的业务特性返回给系统运行。
2.如权利要求1所述的方法,其特征在于,所述根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息之前,还包括:
预先设定业务特性配置表和特性实例配置表,并建立所述业务特性配置表和所述特性实例配置表的映射关系;
其中,所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应。
3.如权利要求2所述的方法,其特征在于:
所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;
其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述;
所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;
其中,所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称;
所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
4.如权利要求3所述的方法,其特征在于:
所述业务特性包括:定时任务;
所述预先设定业务特性配置表和特性实例配置表之前,还包括:将定时任务配置文件中的群组节点配置为业务特性。
5.如权利要求1-4任一项所述的方法,其特征在于,所述从业务特性配置表中获得所述业务特性的配置信息之后,所述从特性实例配置表中获取对应的特性实例的配置信息之前,还包括:
根据获得的所述业务特性的配置信息,判断所述业务特性的业务特性类型值是否为非零值;
如果判断结果为是,则所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息。
6.一种基于系统运行的依赖注入装置,其特征在于,包括:
第一获取单元,用于根据系统运行所需的业务特性,从业务特性配置表中获得所述业务特性的配置信息;
第二获取单元,用于根据所述第一获取单元获得的所述业务特性的配置信息,以及预设的业务特性配置表与特性实例配置表的映射关系,从特性实例配置表中获取对应的特性实例的配置信息;
依赖注入单元,用于根据所述第二获取单元获取的所述特性实例的配置信息,实例化所述业务特性,并将实例化后的业务特性返回给系统运行。
7.如权利要求6所述的装置,其特征在于,还包括:
存储单元,用于存储预先设定的业务特性配置表和特性实例配置表,并存储预先建立的所述业务特性配置表和所述特性实例配置表的映射关系;
其中,所述业务特性配置表和特性实例配置表的映射关系为:所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应。
8.如权利要求7所述的装置,其特征在于:
所述业务特性配置表的任一条记录记录唯一一个业务特性的配置信息;
其中,所述业务特性的配置信息包括:业务特性类型、业务特性类型值、业务特性类型描述;
所述特性实例配置表的任一条记录记录唯一一个特性实例的配置信息;
其中,所述特性实例的配置信息包括:特性实例类型、特性实例类型值、特性实例类型描述、特性实例标识、特性实例的接口名称;
所述业务特性配置表中的记录与所述特性实例配置表中的记录相对应为:当所述业务特性配置表中的记录的业务特性类型值为非零时,所述业务特性配置表中的记录的业务特性类型与所述特性实例配置表中的记录的特性实例类型一一对应。
9.如权利要求8所述的装置,其特征在于:
所述业务特性包括:定时任务;
所述装置还包括:配置单元,用于将定时任务配置文件中的群组节点配置为业务特性。
10.如权利要求6-9任一项所述的装置,其特征在于,还包括:
判断单元,用于根据所述第一获取单元获得的所述业务特性的配置信息,判断所述业务特性的业务特性类型值是否为非零值;如果判断结果为是,则通知所述第二获取单元获取对应的特性实例的配置信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010593877.8A CN102566992B (zh) | 2010-12-17 | 2010-12-17 | 一种基于系统运行的依赖注入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010593877.8A CN102566992B (zh) | 2010-12-17 | 2010-12-17 | 一种基于系统运行的依赖注入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102566992A true CN102566992A (zh) | 2012-07-11 |
CN102566992B CN102566992B (zh) | 2015-04-22 |
Family
ID=46412507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010593877.8A Expired - Fee Related CN102566992B (zh) | 2010-12-17 | 2010-12-17 | 一种基于系统运行的依赖注入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102566992B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103152433A (zh) * | 2013-01-14 | 2013-06-12 | 广东电子工业研究院有限公司 | 一种分布式服务端框架及其使用、交互、请求处理方法 |
CN104407904A (zh) * | 2014-12-15 | 2015-03-11 | 深圳市科漫达智能管理科技有限公司 | 一种模块信息配置的方法及系统 |
CN105204916A (zh) * | 2015-10-30 | 2015-12-30 | 北京奇虎科技有限公司 | 基于环境变量的项目进程运行方法及装置 |
CN106095508A (zh) * | 2016-06-17 | 2016-11-09 | 杭州财人汇网络股份有限公司 | 一种策略加载与注入的方法及装置 |
CN106569835A (zh) * | 2016-11-14 | 2017-04-19 | 济南浪潮高新科技投资发展有限公司 | 一种基于go语言控制反转组件的实现方法 |
CN106775864A (zh) * | 2016-12-13 | 2017-05-31 | 济南浪潮高新科技投资发展有限公司 | 一种基于Autofac支持按需加载的服务管理器的实现方法 |
CN108268289A (zh) * | 2016-12-30 | 2018-07-10 | 阿里巴巴集团控股有限公司 | web应用的参数配置方法、装置及系统 |
CN108279971A (zh) * | 2018-01-26 | 2018-07-13 | 中国银行股份有限公司 | 一种定时执行任务的方法及装置 |
CN108399083A (zh) * | 2017-02-07 | 2018-08-14 | 北京京东尚科信息技术有限公司 | 一种系统部署方法、装置、电子设备和存储介质 |
CN110221820A (zh) * | 2019-04-23 | 2019-09-10 | 平安科技(深圳)有限公司 | spring框架泛型依赖注入方法、装置及计算机设备、存储介质 |
CN106648647B (zh) * | 2016-12-13 | 2020-03-24 | 北京中船信息科技有限公司 | 基于Spring依赖注入动态创建对象的综合管控系统 |
CN112052048A (zh) * | 2020-08-07 | 2020-12-08 | 深圳市欢太科技有限公司 | 数据加载方法及装置、设备、存储介质 |
CN112689169A (zh) * | 2020-12-21 | 2021-04-20 | 湖南快乐阳光互动娱乐传媒有限公司 | 业务播放方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655795A (zh) * | 2009-09-25 | 2010-02-24 | 金蝶软件(中国)有限公司 | 服务实例的创建方法和企业资源计划系统 |
-
2010
- 2010-12-17 CN CN201010593877.8A patent/CN102566992B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655795A (zh) * | 2009-09-25 | 2010-02-24 | 金蝶软件(中国)有限公司 | 服务实例的创建方法和企业资源计划系统 |
Non-Patent Citations (2)
Title |
---|
李发英: "依赖注入在Spring和EJB3.0中的应用与实现", 《电脑知识与技术》 * |
陈兴润等: "一种对象/关系映射隐式持久化框架", 《电子学报》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103152433A (zh) * | 2013-01-14 | 2013-06-12 | 广东电子工业研究院有限公司 | 一种分布式服务端框架及其使用、交互、请求处理方法 |
CN103152433B (zh) * | 2013-01-14 | 2017-12-05 | 广东电子工业研究院有限公司 | 一种分布式服务端的使用、交互和请求处理方法 |
CN104407904A (zh) * | 2014-12-15 | 2015-03-11 | 深圳市科漫达智能管理科技有限公司 | 一种模块信息配置的方法及系统 |
CN104407904B (zh) * | 2014-12-15 | 2018-01-02 | 深圳市科漫达智能管理科技有限公司 | 一种模块信息配置的方法及系统 |
CN105204916A (zh) * | 2015-10-30 | 2015-12-30 | 北京奇虎科技有限公司 | 基于环境变量的项目进程运行方法及装置 |
CN105204916B (zh) * | 2015-10-30 | 2019-03-01 | 北京奇虎科技有限公司 | 基于环境变量的项目进程运行方法及装置 |
CN106095508B (zh) * | 2016-06-17 | 2019-01-25 | 杭州财人汇网络股份有限公司 | 一种策略加载与注入的方法及装置 |
CN106095508A (zh) * | 2016-06-17 | 2016-11-09 | 杭州财人汇网络股份有限公司 | 一种策略加载与注入的方法及装置 |
CN106569835A (zh) * | 2016-11-14 | 2017-04-19 | 济南浪潮高新科技投资发展有限公司 | 一种基于go语言控制反转组件的实现方法 |
CN106775864B (zh) * | 2016-12-13 | 2020-04-17 | 浪潮通用软件有限公司 | 一种基于Autofac支持按需加载的服务管理器的实现方法 |
CN106648647B (zh) * | 2016-12-13 | 2020-03-24 | 北京中船信息科技有限公司 | 基于Spring依赖注入动态创建对象的综合管控系统 |
CN106775864A (zh) * | 2016-12-13 | 2017-05-31 | 济南浪潮高新科技投资发展有限公司 | 一种基于Autofac支持按需加载的服务管理器的实现方法 |
CN108268289A (zh) * | 2016-12-30 | 2018-07-10 | 阿里巴巴集团控股有限公司 | web应用的参数配置方法、装置及系统 |
CN108268289B (zh) * | 2016-12-30 | 2022-01-28 | 阿里巴巴集团控股有限公司 | web应用的参数配置方法、装置及系统 |
CN108399083A (zh) * | 2017-02-07 | 2018-08-14 | 北京京东尚科信息技术有限公司 | 一种系统部署方法、装置、电子设备和存储介质 |
CN108279971A (zh) * | 2018-01-26 | 2018-07-13 | 中国银行股份有限公司 | 一种定时执行任务的方法及装置 |
CN110221820A (zh) * | 2019-04-23 | 2019-09-10 | 平安科技(深圳)有限公司 | spring框架泛型依赖注入方法、装置及计算机设备、存储介质 |
CN110221820B (zh) * | 2019-04-23 | 2024-05-28 | 平安科技(深圳)有限公司 | spring框架泛型依赖注入方法、装置及计算机设备、存储介质 |
CN112052048A (zh) * | 2020-08-07 | 2020-12-08 | 深圳市欢太科技有限公司 | 数据加载方法及装置、设备、存储介质 |
CN112689169A (zh) * | 2020-12-21 | 2021-04-20 | 湖南快乐阳光互动娱乐传媒有限公司 | 业务播放方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102566992B (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102566992A (zh) | 一种基于系统运行的依赖注入方法及装置 | |
CN105893084B (zh) | 版本升级方法及终端设备 | |
CN103365644B (zh) | 一种扩展软件功能的方法及装置 | |
US11960869B2 (en) | Android penetration method and device for implementing silent installation based on accessibility services | |
CN102073526B (zh) | 用于移动终端的软件转移安装方法及系统 | |
CN101639759A (zh) | 动态调整导航菜单的方法及其系统 | |
CN108038665B (zh) | 业务规则管理方法、装置、设备及计算机可读存储介质 | |
CN103942067A (zh) | 智能设备自动清理软件安装包文件的方法及装置 | |
CN101115180B (zh) | 一种电子节目菜单系统及其功能模块动态加载运行方法 | |
CN101655795B (zh) | 服务实例的创建方法和系统 | |
US20130091416A1 (en) | Method for establishing a relationship between semantic data and the running of a widget | |
WO2013182157A1 (zh) | 处理应用程序的方法和装置 | |
US20090063224A1 (en) | Integrated and platform independent approach to modeling of business rules using business and application domain ontologies | |
US9405578B2 (en) | Intelligent application back stack management | |
CN101183975B (zh) | 一种集群应用服务器的分布式热部署方法 | |
CN102163156A (zh) | 移动终端图标替换方法及移动终端 | |
US9497138B2 (en) | Managing capacity in a data center by suspending tenants | |
CN116701063B (zh) | 数联网数据语用内存状态数据的持久化方法、装置及系统 | |
CN106775879B (zh) | 基于安卓系统客户端的vr应用免安装方法及其系统 | |
US7484224B2 (en) | Adapter deployment without recycle | |
KR101888131B1 (ko) | Dds-dbms 연동 도구의 실시간 변경 데이터 발간 서비스 수행 방법 | |
CN104252387A (zh) | 用于在终端中管理应用的设备和方法 | |
US6766323B2 (en) | System, method and computer program for application support in a data processing system | |
CN116303589A (zh) | 一种工作流构建方法、装置、设备及可读存储介质 | |
CN114968422A (zh) | 基于变量状态自动执行合约的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150422 Termination date: 20191217 |
|
CF01 | Termination of patent right due to non-payment of annual fee |