CN106940714A - 一种数据处理方法、装置及电子设备 - Google Patents
一种数据处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN106940714A CN106940714A CN201710129745.1A CN201710129745A CN106940714A CN 106940714 A CN106940714 A CN 106940714A CN 201710129745 A CN201710129745 A CN 201710129745A CN 106940714 A CN106940714 A CN 106940714A
- Authority
- CN
- China
- Prior art keywords
- delay
- class
- agent object
- data processing
- processing method
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种数据处理方法、装置及电子装置,涉及数据处理技术领域。本发明实施例的数据处理方法包括:构建具有类型参数属性的延迟代理类,使用所述延迟代理类生成延迟代理对象,基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。此外,本发明实施例还公开了一种数据处理装置及电子设备。通过本发明实施例的方案,能有效的解决循环依赖导致的异常问题。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及针对具有循环依赖关系的数据的处理技术。
背景技术
循环依赖,就是两个或多个类的对象相互在各自的域中持有对方的引用,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则它们最终反映为一个环。循环依赖由于存在循环调用问题,在进行代码编译的过程中,往往就不会通过。
针对循环依赖问题,现有技术中存在一些解决方案,比如注入中介法,即相互依赖的类对象不直接持有对方的引用,而是通过持有中间对象(即中介)来间接获取对方的引用。然而,中介注入法会产生对象和中介对象之间的依赖关系,加剧了软件模块之间的耦合性。除此之外,现有技术中还存在用延迟注入法解决循环依赖问题的方案,即相互依赖的类对象在构造时不持有对方的引用,而是在构造完成后再相互注入到对方的域中去。由于延迟注入法将对象的构造逻辑和构造本身进行了分离,在构造完成到注入完成之前,对象将处于残缺状态,这种不完整的状态随着***模块的复杂性的增加会显著扩大其持续时间,增加了***的不稳定性。同时因为构造逻辑被分离到构造本身之外,而在一定程度上降低了***的可理解性。
因此,需要一种更加有效的循环依赖数据处理方法。
发明内容
有鉴于此,本发明实施例提供了一种数据处理方法、装置及电子设备,至少部分的解决现有技术中存在的问题。
第一方面,本发明实施例提供了一种数据处理方法,包括:
构建具有类型参数属性的延迟代理类;
使用所述延迟代理类生成延迟代理对象;
基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述方法还包括:
构建用于生成对象的过程类接口。
根据本发明实施例的一种具体实现方式,所述使用所述延迟代理类生成延迟代理对象,包括:
在所述延迟代理类中生成所述过程类接口的对象;
基于所述过程类接口的对象,生成所述延迟代理对象。
根据本发明实施例的一种具体实现方式,在所述基于所述过程类接口的对象,生成所述延迟代理对象之后,所述方法还包括:
在所述延迟代理类的对象为空的情况下,保存所述延迟代理类第一次生成的延迟代理对象;
当所述延迟代理对象被再次调用时,直接使用保存的延迟代理对象。
根据本发明实施例的一种具体实现方式,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
以匿名函数的方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
当所述延迟代理类被加载时,所述延迟代理类定义的延迟代理对象不被初始化。
根据本发明实施例的一种具体实现方式,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
判断所述延迟代理对象是否处于被使用状态;
当所述延迟代理对象被使用时,对所述延迟代理对象执行初始化操作,并基于所述延迟代理对象方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述具有循环依赖关系的目标对象的数目为两个以上;
所述延迟代理对象的数目与所述具有循环依赖关系的目标对象的数目相同。
根据本发明实施例的一种具体实现方式,所述使用所述延迟代理类生成延迟代理对象,包括:
在具有循环依赖关系的目标对象的类中,以私有方式定义所述延迟代理类生成的所述延迟代理对象。
第二方面,本发明实施例还提供了一种数据处理装置,包括:
第一构建模块,用于构建具有类型参数属性的延迟代理类;
第一生成模块,用于使用所述延迟代理类生成延迟代理对象;
第二生成模块,用于基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述装置还包括:
第二构建模块,用于构建用于生成对象的过程类接口。
根据本发明实施例的一种具体实现方式,所述第一生成模块,还用于:
在所述延迟代理类中生成所述过程类接口的对象;
基于所述过程类接口的对象,生成所述延迟代理对象。
根据本发明实施例的一种具体实现方式,所述装置还包括:
保存模块,用于在所述延迟代理类的对象为空的情况下,保存所述延迟代理类第一次生成的延迟代理对象;
使用模块,用于当所述延迟代理对象被再次调用时,直接使用保存的延迟代理对象。
根据本发明实施例的一种具体实现方式,所述第二生成模块还用于:
以匿名函数的方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述第二生成模块还用于:
当所述延迟代理类被加载时,所述延迟代理类定义的延迟代理对象不被初始化。
根据本发明实施例的一种具体实现方式,所述第二生成模块还包括:
判断模块,用于判断所述延迟代理对象是否处于被使用状态;
执行模块,用于当所述延迟代理对象被使用时,对所述延迟代理对象执行初始化操作,并基于所述延迟代理对象方式生成具有循环依赖关系的目标对象。
根据本发明实施例的一种具体实现方式,所述具有循环依赖关系的目标对象的数目为两个以上;
所述延迟代理对象的数目与所述具有循环依赖关系的目标对象的数目相同。
根据本发明实施例的一种具体实现方式,所述第一生成模块还用于:
在具有循环依赖关系的目标对象的类中,以私有方式定义所述延迟代理类生成的所述延迟代理对象。
第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述任第一方面或第一方面的任一实现方式中的数据处理方法。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
第五方面,本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
本发明实施例提供的数据处理方法、装置、电子设备、非暂态计算机可读存储介质及计算机程序,通过基于延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,能够保证构造产生的对象在构造完成时就可以使得对象处于相对完整状态,达到形式和逻辑上的统一,避免了残缺对象的存在。同时,由于仅通过延迟代理对象生成具有循环依赖关系的目标对象,在***耦合度上相比中介注入法,这里只会产生对象到代理对象、代理对象到依赖对象之间的两条单向耦合关系,降低了***的耦合性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种数据处理方法的流程示意图;
图2为本发明实施例提供的一种生成延迟代理对象方法的流程示意图;
图3为本发明实施例提供的一种延迟代理对象初始化的流程示意图;
图4为本发明实施例提供的另一种数据处理方法的流程示意图;
图5为本发明实施例提供的一种数据处理装置的示意性框图;
图6为本发明实施例提供的另一种数据处理装置的示意性框图;
图7为本发明实施例提供的另一种数据处理装置的示意性框图;
图8为本发明实施例提供的第二生成模块的示意性框图;
图9为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种数据处理方法,参见图1,该方法包括以下步骤:
S101,构建具有类型参数属性的延迟代理类。
针对循环依赖问题,假设我们有一个类ProductionDepartment,它包含了另外一个类MarketingDepartment的对象marketing,同时类MarketingDepartment也包含了一个类ProductionDepartment的对象production。那么此时不管实例化哪一个类,都会产生因为循环依赖导致编译通不过或者异常提醒的问题。
为了解决此类的对象循环依赖问题,可以给类ProductionDepartment的对象production写一个代理类LazyProxy,这样类MarketingDepartment的对象包含的不再是marketing而是代理类LazyProxy,这样就利用了第三方来解决循环依赖问题。以Java为例,可以构建延迟代理类如下:
此处定义LazyProxy的类型参数为T,T为可以预先定义的对象类型。
S102,使用所述延迟代理类生成延迟代理对象。
具体的,可以在具有循环依赖关系的类中使用步骤S101中定义的延迟代理类生成延迟代理对象。在生成延迟代理对象之前,需要预先定义具有循环依赖关系的类,以ProductionDepartment类为例,定义如下:
class ProductionDepartment{
private LazyProxy<MarketingDepartment>marketing
}
通过上述方式,在ProductionDepartment的类中用延迟代理类LazyProxy定义了MarketingDepartment的对象marketing,当ProductionDepartment类被***初始化时,可以利用LazyProxy类生成ProductionDepartment的对象marketing。
基于同样的方式,也可以采用LazyProxy在MarketingDepartment的类中生成ProductionDepartment的对象production:
class MarketingDepartment{
private LazyProxy<ProductionDepartment>production;
}
S103,基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
具体的,在需要调用具有依赖关系的对象的运行函数中,可以首先声明以需要使用的对象,这些对象采用LazyProxy类进行封装生成,比如:
LazyProxy<ProductionDepartment>production
LazyProxy<MarketingDepartment>marketing
在生成对象的过程中,与传统的类加载即生成对象不同,此处需要指定需要生成的目标对象采用延迟加载的方式产生,即,仅在目标对象被使用时才进行生成,而在其他情况下则不生成目标对象。
作为一种实现方式,可以采用JAVA中的Lazy匿名函数实现上述功能,在实现该功能的过程中,为了简化实现逻辑,可以采用Lambda表达式实现上述功能,如下所示:
this.production=lazy(()->new ProductionDepartment(this,″production″))
this.marketing=lazy(()->new MarketingDepartment(this,″marketing″))
在步骤S101~S103中,以延迟加载的方式生成具有循环依赖关系的目标对象,能够保证构造产生的对象在构造完成时就可以使得对象处于相对完整状态,达到形式和逻辑上的统一,避免了残缺对象的存在。
在解决循环依赖的过程中,除了上述实施例中的步骤S101~S103之外,可选的,参见图2,生成延迟代理对象方法还可以包括如下步骤:
S201,构建用于生成对象的过程类接口。
通过定义过程类接口,可以在延迟代理中引用定义的过程类,并将该过程类的对象作为中介进行参数传递。具体的,可以按照如下方式定义:
interface Provider<T>{
T get();
}
S202,在所述延迟代理类中生成所述过程类接口的对象。
过程类接口被定义之后,在延迟代理类中可以定义该过程类,并生成该过程类的对象,如下所示:
class LazyProxy<T>{
private Provider<T>provider;
}
S203,基于所述过程类接口的对象,生成所述延迟代理对象。
通过在延迟代理中调用过程类接口的对象,可以生成延迟代理对象,具体的延迟代理对象的内容,可以根据输入的参数来确定,举例如下:
public LazyProxy(Provider<T>provider){
this.provider=provider;
S204,在所述过程类接口的对象为空的情况下,保存所述延迟代理类第一次生成的延迟代理对象。
为了保证对象的调用效率,可以重复调用第一次生成的延迟代理对象,为此,可以设置函数判断是否存在延迟代理对象,当存在延迟代理对象时,对第一次生成的延迟代理对象进行保存,如下所示:
S205,当所述延迟代理对象被再次调用时,直接使用保存的延迟代理对象。
通过该实施例中的技术方案,能够灵活的定义延迟代理类的对象,并且提高了生成的延迟代理类对象的使用效率。
可选的,本发明实施例还提供了一种延迟代理对象初始化的方法,参见图3,该方法包括如下步骤:
S301,当所述延迟代理类被加载时,所述延迟代理类定义的延迟代理对象不被初始化。
为了能够保证延迟代理类定义的延迟代理对象不被初始化,需要采用特定的方式定义对象的初始化方式,作为一种具体的实现方式,可以采用Lazy匿名函数实现该功能。
S302,判断所述延迟代理对象是否处于被使用状态。
监控延迟代理对象的状态,用以判断延迟代理对象是否被调用。当延迟代理对象被调用或使用时,转至步骤S303,否则,不执行操作。
S303,对所述延迟代理对象执行初始化操作,并基于所述延迟代理对象方式生成具有循环依赖关系的目标对象。
通过该实施例中的方式,能够保证构造产生的对象在构造完成时就可以使得对象处于相对完整状态,达到形式和逻辑上的统一。
在实现步骤S102的过程中,参见图4,可以具体采用如下方式来具体实现:
S401,在具有循环依赖关系的目标对象的类中,以私有方式定义所述延迟代理类生成的所述延迟代理对象。
具体的,可以采用private的方式定义延迟代理类生成的所述延迟代理对象,通过该定义方式,延迟代理类生成的所述延迟代理对象只能在本类中被访问到,在其他的类中无法进行访问,提高了数据的安全性。以在ProductionDepartment类中定义marketing为例,举例如下:
class ProductionDepartment{
private LazyProxy<MarketingDepartment>marketing;
}
图5为本发明实施例提供的一种数据处理装置,参见图5,该数据处理装置50包括:
第一构建模块501,用于构建具有类型参数属性的延迟代理类。
针对循环依赖问题,假设我们有一个类ProductionDepartment,它包含了另外一个类MarketingDepartment的对象marketing,同时类MarketingDepartment也包含了一个类ProductionDepartment的对象production。那么此时不管实例化哪一个类,都会出现StackOverflowError错误。
为了解决此类的对象循环依赖问题,可以给类ProductionDepartment的对象production写一个代理类LazyProxy,这样类MarketingDepartment的对象包含的不再是marketing而是代理类LazyProxy,这样就利用了第三方来解决循环依赖问题。以Java为例,可以构建延迟代理类如下:
此处定义LazyProxy的类型参数为T,T为可以预先定义的对象类型。
第一生成模块502,用于使用所述延迟代理类生成延迟代理对象。
具体的,可以在具有循环依赖关系的类中使用步骤S101中定义的延迟代理类生成延迟代理对象。在生成延迟代理对象之前,需要预先定义具有循环依赖关系的类,以ProductionDepartment类为例,定义如下:
class ProductionDepartment{
private LazyProxy<MarketingDepartment>marketing
}
通过上述方式,在ProductionDepartment的类中用延迟代理类LazyProxy定义了MarketingDepartment的对象marketing,当ProductionDepartment类被***初始化时,可以利用LazyProxy类生成ProductionDepartment的对象marketing。
基于同样的方式,也可以采用LazyProxy在MarketingDepartment的类中生成ProductionDepartment的对象production:
class MarketingDepartment{
private LazyProxy<ProductionDepartment>production;
}
第二生成模块503,用于基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
具体的,在需要调用具有依赖关系的对象的运行函数中,可以首先声明以需要使用的对象,这些对象采用LazyProxy类进行封装生成,比如:
LazyProxy<ProductionDepartment>production
LazyProxy<MarketingDepartment>marketing
在生成对象的过程中,与传统的类加载即生成对象不同,此处需要指定需要生成的目标对象采用延迟加载的方式产生,即,仅在目标对象被使用时才进行生成,而在其他情况下则不生成目标对象。
作为一种实现方式,可以采用JAVA中的Lazy匿名函数实现上述功能,在实现该功能的过程中,为了简化实现逻辑,可以采用Lambda表达式实现上述功能,如下所示:
this.production=lazy(()->new ProductionDepartment(this,″production″))
this.marketing=lazy(()->new MarketingDepartment(this,″marketing″))
在本实施例中的方案中,以延迟加载的方式生成具有循环依赖关系的目标对象,能够保证构造产生的对象在构造完成时就可以使得对象处于相对完整状态,达到形式和逻辑上的统一,避免了残缺对象的存在。
数据处理装置50,除了包括上述模块之外,可选的,参见图6,数据处理装置50还可以包括:
第二构建模块601,用于构建用于生成对象的过程类接口。
通过定义过程类接口,可以在延迟代理中引用定义的过程类,并将该过程类的对象作为中介进行参数传递。具体的,可以按照如下方式定义:
interface Provider<T>{
T get();
}
可选的,参见图7,数据处理装置50还可以包括:
保存模块701,用于在所述延迟代理类的对象为空的情况下,保存所述延迟代理类第一次生成的延迟代理对象。
使用模块702,用于当所述延迟代理对象被再次调用时,直接使用保存的延迟代理对象。
可选的,参见图8,第二生成模块503,可以包括:
判断模块5031,用于判断所述延迟代理对象是否处于被使用状态。
执行模块5032,用于当所述延迟代理对象被使用时,对所述延迟代理对象执行初始化操作,并基于所述延迟代理对象方式生成具有循环依赖关系的目标对象。
图5-8对应的实施例中的功能模块所执行的具体内容与其所对应的方法实施例中的内容一一对应,在此不在赘述。
图9示出了本发明实施例提供的电子设备90的结构示意图,电子设备90包括至少一个处理器901(例如CPU),至少一个输入输出接口904,存储器902,和至少一个通信总线903,用于实现这些部件之间的连接通信。至少一个处理器901用于执行存储器902中存储的计算机指令,以使所述至少一个处理器901能够执行前述任一数据处理方法的实施例。存储器902为非暂态存储器(non-transitory memory),其可以包含易失性存储器,例如高速随机存取存储器(RAM:Random Access Memory),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个输入输出接口904(可以是有线或者无线通信接口)实现与至少一个其他设备或单元之间的通信连接。
在一些实施方式中,存储器902存储了程序9021,处理器901执行程序9021,用于执行前述任一数据处理方法实施例中的内容。
该电子设备可以以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)特定服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、***总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行***、装置或设备(如基于计算机的***、包括处理器的***或其他可以从指令执行***、装置或设备取指令并执行指令的***)使用,或结合这些指令执行***、装置或设备而使用。就本说明书而言,″计算机可读介质″可以是任何可以包含、存储、通信、传播或传输程序以供指令执行***、装置或设备或结合这些指令执行***、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。
在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行***执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
构建具有类型参数属性的延迟代理类;
使用所述延迟代理类生成延迟代理对象;
基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
2.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
构建用于生成对象的过程类接口。
3.根据权利要求2所述的数据处理方法,其特征在于,所述使用所述延迟代理类生成延迟代理对象,包括:
在所述延迟代理类中生成所述过程类接口的对象;
基于所述过程类接口的对象,生成所述延迟代理对象。
4.根据权利要求3所述的数据处理方法,其特征在于,在所述基于所述过程类接口的对象,生成所述延迟代理对象之后,所述方法还包括:
在所述延迟代理类的对象为空的情况下,保存所述延迟代理类第一次生成的延迟代理对象;
当所述延迟代理对象被再次调用时,直接使用保存的延迟代理对象。
5.根据权利要求1所述的数据处理方法,其特征在于,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
以匿名函数的方式生成具有循环依赖关系的目标对象。
6.根据权利要求1所述的数据处理方法,其特征在于,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
当所述延迟代理类被加载时,所述延迟代理类定义的延迟代理对象不被初始化。
7.根据权利要求1所述的数据处理方法,其特征在于,所述基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象,包括:
判断所述延迟代理对象是否处于被使用状态;
当所述延迟代理对象被使用时,对所述延迟代理对象执行初始化操作,并基于所述延迟代理对象方式生成具有循环依赖关系的目标对象。
8.根据权利要求1所述的数据处理方法,其特征在于:
所述具有循环依赖关系的目标对象的数目为两个以上;
所述延迟代理对象的数目与所述具有循环依赖关系的目标对象的数目相同。
9.根据权利要求1所述的数据处理方法,其特征在于,所述使用所述延迟代理类生成延迟代理对象,包括:
在具有循环依赖关系的目标对象的类中,以私有方式定义所述延迟代理类生成的所述延迟代理对象。
10.一种数据处理装置,其特征在于,包括:
第一构建模块,用于构建具有类型参数属性的延迟代理类;
第一生成模块,用于使用所述延迟代理类生成延迟代理对象;
第二生成模块,用于基于所述延迟代理对象,以延迟加载的方式生成具有循环依赖关系的目标对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710129745.1A CN106940714B (zh) | 2017-03-06 | 2017-03-06 | 一种数据处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710129745.1A CN106940714B (zh) | 2017-03-06 | 2017-03-06 | 一种数据处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106940714A true CN106940714A (zh) | 2017-07-11 |
CN106940714B CN106940714B (zh) | 2019-07-30 |
Family
ID=59468720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710129745.1A Active CN106940714B (zh) | 2017-03-06 | 2017-03-06 | 一种数据处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106940714B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108984728A (zh) * | 2018-07-11 | 2018-12-11 | 北京奇艺世纪科技有限公司 | 一种代理类生成方法及装置 |
CN109683992A (zh) * | 2017-10-18 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 用于管理对象的方法和装置 |
CN110673801A (zh) * | 2019-09-29 | 2020-01-10 | 苏州浪潮智能科技有限公司 | 一种依赖对象的初始化操作方法及相关装置 |
CN110874246A (zh) * | 2018-08-28 | 2020-03-10 | Tcl集团股份有限公司 | 一种模块加载方法、***及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101639775A (zh) * | 2009-09-01 | 2010-02-03 | 用友软件股份有限公司 | 一种组件构建方法和装置 |
US20120222030A1 (en) * | 2009-08-19 | 2012-08-30 | Nxp B.V. | Lazy resource management |
CN104360862A (zh) * | 2014-11-20 | 2015-02-18 | 浪潮通用软件有限公司 | Net平台下基于属性标签和配置文件的Xml序列化模型实现方法 |
CN104714813A (zh) * | 2013-12-13 | 2015-06-17 | 航天信息股份有限公司 | 一种基于代理模式的android数据库延迟加载方法 |
-
2017
- 2017-03-06 CN CN201710129745.1A patent/CN106940714B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120222030A1 (en) * | 2009-08-19 | 2012-08-30 | Nxp B.V. | Lazy resource management |
CN101639775A (zh) * | 2009-09-01 | 2010-02-03 | 用友软件股份有限公司 | 一种组件构建方法和装置 |
CN104714813A (zh) * | 2013-12-13 | 2015-06-17 | 航天信息股份有限公司 | 一种基于代理模式的android数据库延迟加载方法 |
CN104360862A (zh) * | 2014-11-20 | 2015-02-18 | 浪潮通用软件有限公司 | Net平台下基于属性标签和配置文件的Xml序列化模型实现方法 |
Non-Patent Citations (2)
Title |
---|
SPEEDME: "java对象循环依赖问题", 《CSDN博客,HTTP://BLOG.CSDN.NET/SPEEDME/ARTICLE/DETAILS/41145125》 * |
李刚: "Hibernate延迟加载剖析与代理模式应用", 《HTTPS://WWW.IBM.COM/DEVELOPERWORKS/CN/JAVA/J-LO-HIBERNATELAZY/》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109683992A (zh) * | 2017-10-18 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 用于管理对象的方法和装置 |
CN109683992B (zh) * | 2017-10-18 | 2022-06-07 | 北京京东尚科信息技术有限公司 | 用于管理对象的方法和装置 |
CN108984728A (zh) * | 2018-07-11 | 2018-12-11 | 北京奇艺世纪科技有限公司 | 一种代理类生成方法及装置 |
CN110874246A (zh) * | 2018-08-28 | 2020-03-10 | Tcl集团股份有限公司 | 一种模块加载方法、***及设备 |
CN110673801A (zh) * | 2019-09-29 | 2020-01-10 | 苏州浪潮智能科技有限公司 | 一种依赖对象的初始化操作方法及相关装置 |
CN110673801B (zh) * | 2019-09-29 | 2022-11-25 | 苏州浪潮智能科技有限公司 | 一种依赖对象的初始化操作方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106940714B (zh) | 2019-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106940714A (zh) | 一种数据处理方法、装置及电子设备 | |
WO2021000575A1 (zh) | 数据交互方法、装置和电子设备 | |
US7865780B2 (en) | Method for test case generation | |
JP2012234536A (ja) | セマンティックモデルおよびルールからコードを生成するための方法 | |
EP3912074B1 (en) | Generating a synchronous digital circuit from a source code construct defining a function call | |
US20140068551A1 (en) | Configuring Assembly of a System using Supplied Architectural Artifacts | |
TW202107313A (zh) | 模型參數確定方法、裝置和電子設備 | |
CN106921578A (zh) | 一种转发表项的生成方法和装置 | |
CN108228754A (zh) | 流程生成方法及终端设备 | |
CN109299913B (zh) | 员工薪资方案生成方法及装置 | |
Cui et al. | A hierarchical combinatorial testing method for smart phone software in wearable IoT systems | |
CN109739872A (zh) | 一种sql语句处理的实现方法、***及操作方法 | |
Ciancia et al. | Families of symmetries as efficient models of resource binding | |
Khomenko et al. | An algorithm for direct construction of complete merged processes | |
WO2014165464A2 (en) | Cryptographic mechanisms to provide information privacy and integrity | |
US8600914B2 (en) | Left and right unlinking for a shared knowledge base | |
Li et al. | Policy to cope with deadlocks and livelocks for flexible manufacturing systems using the max′‐controlled new smart siphons | |
CN115022312A (zh) | 多智能合约引擎的实现方法、装置、电子设备及存储介质 | |
CN102880469B (zh) | 一种实现AUTOSAR中ExclusiveArea到OSResource映射的方法 | |
Brdjanin et al. | On automated generation of associations in conceptual database model | |
CN110960858A (zh) | 一种游戏资源的处理方法、装置、设备及存储介质 | |
US9235382B2 (en) | Input filters and filter-driven input processing | |
CN116756460B (zh) | 组合数据获取方法、装置及相关设备 | |
CN114710395B (zh) | 基于数字孪生技术的网络业务的实施实例的构建方法 | |
CN114363363B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |