CN114443116A - 依赖注入方法、装置、电子设备以及计算机可读存储介质 - Google Patents
依赖注入方法、装置、电子设备以及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114443116A CN114443116A CN202011232518.XA CN202011232518A CN114443116A CN 114443116 A CN114443116 A CN 114443116A CN 202011232518 A CN202011232518 A CN 202011232518A CN 114443116 A CN114443116 A CN 114443116A
- Authority
- CN
- China
- Prior art keywords
- class
- service
- dependent
- data
- data information
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种依赖注入方法、装置、电子设备及计算机可读存储介质,涉及计算机技术领域。该方法包括:获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息;其中,数据信息是检测到依赖类的服务类型为注册服务时,响应于注册服务存储于第一存储池中的;依赖类的服务类型为注册服务是通过第二装饰器设置的;基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到注入服务所指示的类中。
Description
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种依赖注入方法、装置、电子设备以及计算机可读存储介质。
背景技术
随着互联网技术的不断发展,各种类型的应用程序也得到了广泛的关注,在应用程序的开发过程中,开发人员可以基于控制反转(inversion of control,IOC)容器管理和控制应用程序中类与类之间的依赖关系,从而进行依赖注入。
目前,基于IOC容器进行依赖注入时,需要开发人员进行大量的代码配置才能完成依赖注入过程,实现难度较大,可适用的场景有限。
发明内容
本申请的第一方面提供了一种依赖注入方法,包括:
获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息;
其中,数据信息是检测到依赖类的服务类型为注册服务时,响应于注册服务存储于第一存储池中的;依赖类的服务类型为注册服务是通过第二装饰器设置的;
基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到注入服务所指示的类中。
可选的,若数据信息为构造函数;则基于数据信息,得到依赖类的实例化数据,包括:
基于构造函数,生成依赖类的实例化数据。
可选的,若数据信息为依赖类对应的实例;则基于数据信息,得到依赖类的实例化数据,包括:
将数据信息作为依赖类的实例化数据。
可选的,响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息之前,包括:
检测到依赖类的服务类型为注册服务时,响应于注册服务,获取第二装饰器对应的装饰器工厂函数以及依赖类的数据信息;
基于第二装饰器对应的装饰器工厂函数,判断第一存储池中是否存储有数据信息;
若未存储有数据信息,则将数据信息存储至控制反转容器的第一存储池中。
可选的,响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息,包括:
响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据;
若未存储有实例化数据,则从第一存储池中获取构造函数。
可选的,响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据,包括:
响应于注入服务,获取第一装饰器对应的装饰器工厂函数以及类的键值;
基于键值以及第一装饰器对应的装饰器工厂函数,判断控制反转容器的第二存储池中是否存储有实例化数据。
可选的,基于数据信息,得到依赖类的实例化数据之后,方法还包括:
将实例化数据存储至控制反转容器的第二存储池中。
本申请的第二方面提供了一种依赖注入装置,包括:
第一获取模块,用于获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
第二获取模块,用于响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息;
其中,数据信息是检测到依赖类的服务类型为注册服务时,响应于注册服务存储于第一存储池中的;依赖类的服务类型为注册服务是通过第二装饰器设置的;
实例化模块,用于基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到注入服务所指示的类中。
可选的,若数据信息为构造函数;实例化模块,具体用于:
基于构造函数,生成依赖类的实例化数据。
可选的,若数据信息为依赖类对应的实例;则实例化模块,具体用于:
将数据信息作为依赖类的实例化数据。
可选的,该装置还包括第三获取模块、判断模块以及第一存储模块;
第二获取模块响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息之前;
第三获取模块,用于检测到依赖类的服务类型为注册服务时,响应于注册服务,获取第二装饰器对应的装饰器工厂函数以及依赖类的数据信息;
判断模块,用于基于第二装饰器对应的装饰器工厂函数,判断第一存储池中是否存储有数据信息;
第一存储模块,用于若未存储有数据信息,则将数据信息存储至控制反转容器的第一存储池中。
可选的,第二获取模块,具体用于:
响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据;
若未存储有实例化数据,则从第一存储池中获取构造函数。
可选的,第二获取模块在响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据时,具体用于:
响应于注入服务,获取第一装饰器对应的装饰器工厂函数以及类的键值;
基于键值以及第一装饰器对应的装饰器工厂函数,判断控制反转容器的第二存储池中是否存储有实例化数据。
可选的,该装置还包括第二存储模块,在实例化模块基于数据信息,得到依赖类的实例化数据之后,第二存储模块用于:
将实例化数据存储至控制反转容器的第二存储池中。
本申请实施例的第三方面,提供了一种电子设备,该电子设备包括存储器和处理器;存储器中存储有计算机程序;处理器用于在运行计算机程序时执行第一方面及其可选的实施方式中任一项的方法。
本申请实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现第一方面及其可选的实施方式中任一项的方法。
本申请提供的技术方案带来的有益效果是:
本申请可以通过第二装饰器将依赖类的服务类型设置为注册服务,从而将依赖类的数据信息存储于第一存储池中,这样当获取用户输入的针对类的配置操作,通过预置的第一装饰器可以将类的服务类型设置为注入服务;响应于该注入服务,可以从控制反转容器的第一存储池中获取类对应的依赖类的数据信息,从而基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到类中,以完成依赖注入,可见,本申请的依赖注入过程只需要通过第一装饰器以及第二装饰器设置服务类型就可以自动进行服务注册以及服务注入,不需要用户进行大量代码配置也能完成依赖注入过程,简化了基于IOC容器进行依赖注入的难度,同时,本申请的方法适用于前端页面,相对于现有只能后台进行代码配置的方案,本申请的适用场景更加广泛,也更加便于用户操作。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请依赖注入方法的一个实施例示意图;
图2为本申请依赖注入方法的另一个实施例示意图;
图3为本申请依赖注入方法的场景示意图;
图4为本申请依赖注入装置的结构示意图;
图5为本申请电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
控制反转(inversion of control,IOC)是一种思想,就是通过控制反转容器去创建和控制类与类之间的依赖关系,相对于由类来管理和创建其依赖类的方式,本申请控制反转容器相当于作为类与依赖类之间的第三方,任意类获取其依赖类的实例都需要向控制反转容器请求并从控制反转容器中获取,这样可以减低计算机代码的耦合度。
控制反转的一种常用的方式是依赖注入(dependency injection,DI),依赖注入就是把符合依赖关系的对象通过构造函数传递给需要的对象。
装饰器:装饰器可以增加、监视或修改类的属性定义,例如通过装饰器定义类的服务类型。装饰器的本质上是一个python函数。
类指的是具有相同属性和服务的一组对象的集合,为属于该类的所有对象提供了统一的抽象描述。两个类相依赖指的是一个类依赖于另一个类的定义,即使用某一类使用时,该类的使用依赖于其依赖类。
基于此,请参照图1,本申请提出了一种依赖注入方法,该方法由电子设备执行,该电子设备可以是终端设备也可以是服务器,该方法可以包括:
步骤S101、获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
在本实施例中,用户输入的针对类的配置操作可以是:用户在类的头部添加第一装饰器,第一装饰器本质上是一个python函数,该函数用于将类的服务类型定义为注入服务,则电子设备基于用户的配置操作,解析第一装饰器对应的python函数,可以将类的服务类型设置为注入服务。
注入服务指的是将该类的依赖类的实例化数据注入到该类中,所设置的注入服务中携带有该类的标识,该标识用于确定实例化数据注入到哪一个类中。
步骤S102、响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息;其中,数据信息是检测到依赖类的服务类型为注册服务时,响应于注册服务存储于第一存储池中的;依赖类的服务类型为注册服务是通过第二装饰器设置的;
电子设备响应于该注入服务,检测控制反转容器的第一存储池中是否存在依赖类的数据信息,若存在,则从控制反转容器的第一存储池中获取该依赖类的数据信息。
在本实施例中,控制反转容器中包括多个存储池,第一容器池用于存储该依赖类的数据信息,当然,除了该依赖类的数据信息外,第一容器池中还可以存储的有其他依赖类的数据信息。
在本实施例中,数据信息的作用是用于得到依赖类的实例化数据。
可见,数据信息是事先存储于第一容器池中的,将数据信息存储于第一容器池是通过第二装饰器来实现的,具体的:
用户可以在依赖类的头部添加第二装饰器,第二装饰器本质上也是一个python函数,该函数用于将依赖类的服务类型定义为注册服务,则电子设备检测到用户在依赖类的头部添加第二装饰器的操作时,可以解析第二装饰器对应的python函数,从而将依赖类的服务类型设置为注册服务。
注册服务指示将依赖类的数据信息注册到控制反转容器,则电子设备响应于该注册服务,获取依赖类的数据信息后,可以将依赖类的数据信息存储于控制反转容器的第一存储池中。
步骤S103、基于数据信息,得到类的实例化数据,并将实例化数据注入到注入服务所指示的目标类中。
电子设备基于该数据信息,可以得到依赖类的实例化数据,电子设备确定该依赖类对应的类后,将实例化数据注入到该类中。
在本实施例中,电子设备确定确定依赖类对应的类的方式可以是:通过查找类与其依赖类的映射关系表确定依赖类对应的类,还可以是基于注入服务中携带的该类的标识,确定依赖类对应的该类。
可见,本申请可以通过第二装饰器将依赖类的服务类型设置为注册服务,从而将依赖类的数据信息存储于第一存储池中,这样当获取用户输入的针对类的配置操作,通过预置的第一装饰器可以将类的服务类型设置为注入服务;响应于该注入服务,可以从控制反转容器的第一存储池中获取类对应的依赖类的数据信息,从而基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到类中,以完成依赖注入,可见,本申请的依赖注入过程只需要通过第一装饰器以及第二装饰器设置服务类型就可以自动进行服务注册以及服务注入,不需要用户进行大量代码配置,简化了基于IOC容器进行依赖注入的难度,同时,本申请的方法适用于前端页面,相对于现有只能后台进行代码配置的方案,本申请的适用场景更加广泛,也更加便于用户操作。
进一步的,存储于第一存储池中的依赖类的数据信息可以是该依赖类的实例或该依赖类的构造函数,则本申请包含如下了两种可能的情况:
一种可能的情况A是:若数据信息为构造函数;则步骤S103基于数据信息,得到依赖类的实例化数据,可以包括:基于构造函数,生成依赖类的实例化数据。
在本实施例中,注册服务阶段可以是将依赖类的构造函数存储于第一容器池中,则依赖类的数据信息指的是依赖类的构造函数,在注入服务阶段,电子设备获取依赖类的构造函数后,可以调用依赖类的构造函数进行依赖类的实例化生成实例化数据。
另一种可能的情况B是,若数据信息为依赖类对应的实例;则步骤S103基于数据信息,得到依赖类的实例化数据,可以包括:
将数据信息作为依赖类的实例化数据。
在本实施例中,注册服务阶段可以是将依赖类的实例化数存储于第一容器池中,则依赖类的数据信息指的是依赖类的实例化数据,在注入服务阶段,电子设备可以直接获取依赖类的实例化数据,而不需要再进行实例化的过程。
在本实施例中,构造函数所占用的内存空间明显少于实例化数据,上述情况A相对于情况B可以节省控制反转容器的存储空间,从另一个角度而言,情况B的方案可以直接从控制反转容器中获取实例化数据,也加快了依赖注入的效率。
进一步的,下面,对服务注册阶段和服务注入阶段进行解释说明:
(一)在本申请实施例中,服务注册阶段的具体过程是:
步骤S102响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息之前,该方法还可以包括:
检测到依赖类的服务类型为注册服务时,响应于注册服务,获取第二装饰器对应的装饰器工厂函数以及依赖类的数据信息;
基于第二装饰器对应的装饰器工厂函数,判断第一存储池中是否存储有数据信息;
若未存储有数据信息,则将数据信息存储至控制反转容器的第一存储池中。
如上述电子设备可以通过第二装饰器将某一依赖类的服务类型设置为注册服务,则响应于该注册服务,电子设备可以获取第二装饰器对应的装饰器工厂函数以及该依赖类,电子设备获取该依赖类后,可以对该依赖类进行参数分解得到该依赖类的数据信息。
在本实施例中,参数分解具体过程是:电子设备对依赖类进行解析得到依赖类的唯一标识,同读取依赖类的构造函数,该构造函数实际上可以看成是依赖类的未初始化实例,电子设备基于依赖类的构造函数得到依赖类的数据信息,具体的:可以将依赖类的构造函数作为依赖类的数据信息(即对应上述数据信息为依赖类的构造函数的情况)或基于依赖类的构造函数得到依赖类的实例化数据后,将实例化数据作为依赖类的数据信息(即对应上述数据信息为依赖类的实例化数据的情况)。
在本实施例中,依赖类的唯一标识可以是依赖类的名称,依赖类可以以键值对的形式存在,则依赖类的唯一标识还可以是依赖类的key值。
电子设备得到第二装饰器对应的装饰器工厂函数、依赖类的数据信息以及依赖类的唯一标识后,电子设备可以调用第二装饰器对应的装饰器工厂函数中的识别函数,基于依赖类的唯一标识,判断第一存储池中是否存储有依赖类的数据信息;若第一存储池中未存储有依赖类的数据信息,则调用第二装饰器对应的装饰器工厂函数中的存储函数,将依赖类的数据信息存储于第一存储池中,若第一存储池中存储有依赖类的数据信息,则基于该依赖类的唯一标识向用户展示该依赖类已注册到控制反转容器的提示信息,以避免依赖类的重复注册。
(二)针对上述类的数据信息为类的构造函数的情况,注入服务阶段具体为:
步骤S102响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息,可以包括:响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据;若未存储有实例化数据,则从第一存储池中获取构造函数。
可选的,响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据,包括:
响应于注入服务,获取第一装饰器对应的装饰器工厂函数以及类的键值;
基于键值以及第一装饰器对应的装饰器工厂函数,判断控制反转容器的第二存储池中是否存储有实例化数据。
电子设备响应于针对该类的注入服务,基于类与类的对应关系表确定该类对应的依赖类,电子设备获取第一装饰器的装饰器工厂函数,并获取依赖类的键值对。
电子设备将键值对进行参数分解,参数分解过程具体是:将依赖类的参数名作为实例名称,并基于键值对确定依赖类的key值;
随后,电子设备基于依赖类的key值查找key与元数据的映射关系表,得到与依赖类的key值对应的目标元数据,将目标元数据输入到第一装饰器的装饰器工厂函数中,以便于通过第一装饰器的装饰器工厂函数中的服务实例状态判断函数,基于该元数据判断第二存储池中是否存储有该依赖类的实例化数据。
若存在依赖类的实例化数据,则直接从第二存储池中获取依赖类的实例化数据,将参数分解得到的实例名称作为该实例化数据的名称,并将实例化数据注入到该类中;
若不存在依赖类的实例化数据,则需要执行步骤S102中从控制反转容器的第一存储池中获取类对应的依赖类的数据信息的操作,具体的:
基于目标元数据查询控制反转容器的第一存储池,判断第一存储池中是否存在依赖类的构造函数,若存在,则获取依赖类的构造函数并生成依赖类的实例化数据注入到类中,将参数分解得到的实例名称作为该实例化数据的名称;若不存在,则进行异常提醒。
可选的,步骤S103基于数据信息,得到依赖类的实例化数据之后,该方法还可以包括:
将实例化数据存储至控制反转容器的第二存储池中。
在本实施例中,电子设备将依赖类的实例化数据注入到类的同时,还会将该实例化数据存储于控制反转容器的第二存储池中,以便于后续使用。
综上,参照图2,本申请的整体流程如下:
S1、通过第一装饰器将依赖类的服务类型设置为注册服务;
S2、响应于注册服务获取依赖类的构造函数,并将构造函数存储于IOC容器的第一存储池中;
S3、通过第一装饰器将类的服务类型设置为注入服务;
S4、响应于注入服务,判断控制反转容器的第二存储池中是否存储有依赖类的实例化数据;
S5、若存储有实例化数据,则从第二存储池中获取实例化数据,并注入到类中;
S6、若未存储有实例化数据,则从第一存储池中获取依赖类的构造函数;
S7、基于构造函数生成依赖类的实例化数据,并将实例化数据注入到类中,同时将实例化数据存储于第二存储池。
需要说明的是,进行依赖注入时,若第一存储池中已存在依赖类的构造函数,则不需要执行步骤S1和S2。
本实施例的方案与上述图1所示实施例为实际上相同的方案,本实施例方案的具体实现方式可以参照上述实施例方案的相关描述,具体此处不再赘述。
请参照图3,本申请的一种可能的场景为:
依赖关系为:B类依赖于A类,C依赖于B类,则:
注册服务阶段:可以先通过第二装饰器将A类和B类的服务类型设置为注册服务,则可以将注册A类到IOC容器和注册B类到IOC容器,(即将类的构造函数存储于IOC容器);
注入服务阶段:通过第一装饰器将B类和C类的服务类型设置为注入服务,则分别确定B类的依赖类即A类,C类的依赖类即B类,从IOC容器中获取A类的构造函数,基于A类的构造函数得到A类的实例化数据并注入到B类中,从IOC容器中获取B类的构造函数,基于B类的构造函数得到B类的实例化数据注入到C类中。
综上,本申请具有如下技术效果:
1、基于IOC容器控制和管理类与类之间的依赖关系,很好的解决了代码紧耦合的问题,是一种让代码实现松耦合的机制。
2、相对于现有的基于IOC容器进行依赖注入时需要用户进行大量代码配置的方案,本申请用户仅需要通过装饰器设置类的服务类型就可以自动化的进行依赖注入,简化了基于IOC容器进行依赖注入的难度;
3、适用于前端页面,简化用户操作,适用面更加广泛。
请参照图4,本申请还提供了一种依赖注入装置,包括:
第一获取模块401,用于获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
第二获取模块402,用于响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息;
其中,数据信息是检测到依赖类的服务类型为注册服务时,响应于注册服务存储于第一存储池中的;依赖类的服务类型为注册服务是通过第二装饰器设置的;
实例化模块403,用于基于数据信息,得到依赖类的实例化数据,并将实例化数据注入到注入服务所指示的类中。
可选的,若数据信息为构造函数;实例化模块403,具体用于:
基于构造函数,生成依赖类的实例化数据。
可选的,若数据信息为依赖类对应的实例;则实例化模块403,具体用于:
将数据信息作为依赖类的实例化数据。
可选的,该装置还包括第三获取模块、判断模块以及第一存储模块;
第二获取模块402响应于注入服务,从控制反转容器的第一存储池中获取类对应的依赖类的数据信息之前;
第三获取模块,用于检测到依赖类的服务类型为注册服务时,响应于注册服务,获取第二装饰器对应的装饰器工厂函数以及依赖类的数据信息;
判断模块,用于基于第二装饰器对应的装饰器工厂函数,判断第一存储池中是否存储有数据信息;
第一存储模块,用于若未存储有数据信息,则将数据信息存储至控制反转容器的第一存储池中。
可选的,第二获取模块402,具体用于:
响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据;
若未存储有实例化数据,则从第一存储池中获取构造函数。
可选的,第二获取模块402在响应于注入服务,判断控制反转容器的第二存储池中是否存储有实例化数据时,具体用于:
响应于注入服务,获取第一装饰器对应的装饰器工厂函数以及类的键值;
基于键值以及第一装饰器对应的装饰器工厂函数,判断控制反转容器的第二存储池中是否存储有实例化数据。
可选的,该装置还包括第二存储模块,在实例化模块403基于数据信息,得到依赖类的实例化数据之后,第二存储模块用于:
将实例化数据存储至控制反转容器的第二存储池中。
在一个可选实施例中提供了一种电子设备,如图5所示,图5所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种依赖注入方法,其特征在于,包括:
获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
响应于所述注入服务,从控制反转容器的第一存储池中获取所述类对应的依赖类的数据信息;
其中,所述数据信息是检测到所述依赖类的服务类型为注册服务时,响应于所述注册服务存储于第一存储池中的;所述依赖类的服务类型为注册服务是通过第二装饰器设置的;
基于所述数据信息,得到所述依赖类的实例化数据,并将所述实例化数据注入到所述注入服务所指示的所述类中。
2.根据权利要求1所述的方法,其特征在于,若所述数据信息为构造函数;则所述基于所述数据信息,得到所述依赖类的实例化数据,包括:
基于所述构造函数,生成所述依赖类的实例化数据。
3.根据权利要求1所述的方法,其特征在于,若所述数据信息为依赖类对应的实例;则所述基于所述数据信息,得到所述依赖类的实例化数据,包括:
将所述数据信息作为所述依赖类的实例化数据。
4.根据权利要求1所述的方法,其特征在于,所述响应于所述注入服务,从控制反转容器的第一存储池中获取所述类对应的依赖类的数据信息之前,包括:
检测到所述依赖类的服务类型为注册服务时,响应于所述注册服务,获取第二装饰器对应的装饰器工厂函数以及所述依赖类的数据信息;
基于所述第二装饰器对应的装饰器工厂函数,判断所述第一存储池中是否存储有所述数据信息;
若未存储有所述数据信息,则将所述数据信息存储至所述控制反转容器的第一存储池中。
5.根据权利要求2所述的方法,其特征在于,所述响应于所述注入服务,从控制反转容器的第一存储池中获取所述类对应的依赖类的数据信息,包括:
响应于所述注入服务,判断控制反转容器的第二存储池中是否存储有所述实例化数据;
若未存储有所述实例化数据,则从所述第一存储池中获取所述构造函数。
6.根据权利要求5所述的方法,其特征在于,所述响应于所述注入服务,判断控制反转容器的第二存储池中是否存储有所述实例化数据,包括:
响应于所述注入服务,获取第一装饰器对应的装饰器工厂函数以及所述类的键值;
基于所述键值以及所述第一装饰器对应的装饰器工厂函数,判断控制反转容器的第二存储池中是否存储有所述实例化数据。
7.根据权利要求5所述的方法,其特征在于,所述基于所述数据信息,得到所述依赖类的实例化数据之后,所述方法还包括:
将所述实例化数据存储至所述控制反转容器的第二存储池中。
8.一种依赖注入方法,其特征在于,包括:
第一获取模块,用于获取到用户输入的针对类的配置操作时,通过预置的第一装饰器将类的服务类型设置为注入服务;
第二获取模块,用于响应于所述注入服务,从控制反转容器的第一存储池中获取所述类对应的依赖类的数据信息;
其中,所述数据信息是检测到所述依赖类的服务类型为注册服务时,响应于所述注册服务存储于第一存储池中的;所述依赖类的服务类型为注册服务是通过第二装饰器设置的;
实例化模块,用于基于所述数据信息,得到所述依赖类的实例化数据,并将所述实例化数据注入到所述注入服务所指示的所述类中。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器;
所述存储器中存储有计算机程序;
所述处理器,用于在运行所述计算机程序时执行权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011232518.XA CN114443116A (zh) | 2020-11-06 | 2020-11-06 | 依赖注入方法、装置、电子设备以及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011232518.XA CN114443116A (zh) | 2020-11-06 | 2020-11-06 | 依赖注入方法、装置、电子设备以及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443116A true CN114443116A (zh) | 2022-05-06 |
Family
ID=81361622
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011232518.XA Pending CN114443116A (zh) | 2020-11-06 | 2020-11-06 | 依赖注入方法、装置、电子设备以及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443116A (zh) |
-
2020
- 2020-11-06 CN CN202011232518.XA patent/CN114443116A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176802B (zh) | 任务处理方法、装置、电子设备及存储介质 | |
CN110032568B (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
CN109478148B (zh) | 基于工作流程的对象析构 | |
CN112764911A (zh) | 一种任务调度方法、装置、电子设备及可读存储介质 | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
CN106445514B (zh) | 一种管理Android平台的Activity实例的方法和装置 | |
CN111443901B (zh) | 一种基于Java反射的业务扩展方法及装置 | |
CN108021405B (zh) | 一种soc系统启动过程中存储介质的驱动方法和装置 | |
CN112256318B (zh) | 一种用于依赖产品的构建方法及设备 | |
CN110619204A (zh) | 一种邀请码生成方法、装置、终端设备及存储介质 | |
CN108829391B (zh) | 一种Fragment中控件识别方法及系统 | |
CN111240772A (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN112052048B (zh) | 数据加载方法及装置、设备、存储介质 | |
CN116974581B (zh) | 代码生成方法、装置、电子设备和存储介质 | |
CN110083602B (zh) | 一种基于hive表的数据存储及数据处理的方法及装置 | |
CN109947488B (zh) | 通用功能模块的对象初始化方法、装置、设备和存储介质 | |
CN116010038A (zh) | Spring框架的Bean对象管理方法、装置、电子设备及存储介质 | |
CN114443116A (zh) | 依赖注入方法、装置、电子设备以及计算机可读存储介质 | |
CN109408035B (zh) | 一种业务系统的流程配置方法、存储介质和服务器 | |
CN108052335B (zh) | 数据管理方法、装置、计算设备及存储介质 | |
CN116226921A (zh) | 一种脱敏处理方法及装置 | |
CN116432185A (zh) | 一种异常检测方法、装置、可读存储介质及电子设备 | |
CN112988277B (zh) | 规则文件加载方法、装置、服务器及介质 | |
CN112907198B (zh) | 业务状态流转维护方法、装置及电子设备 | |
CN109150993B (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 |