1.本发明涉及控件初始化领域,特别是涉及一种控件的初始化方法、系统、设备及存储介质。
背景技术:
2.控件初始化是基于配置对页面进行渲染的重要环节。控件初始化的成功与否,直接影响页面最终的显示效果。控件初始化的过程的核心在于处理和分析控件的初始化顺序。现有技术主要根据控件的加载顺序来执行控件的初始化。但是,由于控件之间存在依赖属性,现有技术在根据控件加载顺序来执行控件的初始化时,会存在控件初始化逻辑错误,进而导致页面初始化陷入死循环的风险。
技术实现要素:
3.本发明实施例的目的在于提供一种控件的初始化方法、系统、设备及存储介质,以实现提高页面初始化进程的可靠性。具体技术方案如下:
4.一种控件的初始化方法,所述方法包括:
5.确定各控件的依赖关系。
6.基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链。
7.对各循环依赖链执行解绑操作,获得非循环依赖链。
8.从所述非循环依赖链中确定根控件,其中,所述根控件为不依赖于其他控件的控件。
9.按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从所述根控件开始,沿所述根控件所处的所述非循环依赖链依次对各控件执行初始化。
10.可选的,所述确定各控件的依赖关系,包括:
11.遍历控件集合中的每个控件,按照预设依赖检测规则,判断该目标控件的属性数据是否与其他控件的标识符匹配,若是,则确定该目标控件依赖于该其他控件,并记录该目标控件的依赖关系,其中,所述目标控件是所述控件集合中被检测的控件,所述其他控件时所述控件集合中除所述目标控件外的控件,所述依赖关系包含:该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符。
12.可选的,所述基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链,包括:
13.根据所述依赖关系,确定各控件所处的依赖链。
14.对每个依赖链:
15.将该依赖链中的任一控件作为初始控件。从所述初始控件开始,沿该依赖链依次将各控件作为当前控件进行实例化操作,直至当前控件为已经进行过实例化的控件或当前控件在依赖链中不存在其所依赖的控件。
16.若当前控件为已经进行过实例化的控件,则确定该依赖链为循环依赖链。
17.若当前控件在依赖链中不存在其所依赖的控件,则确定该依赖链为初始化执行链。
18.可选的,所述实例化操作包括:
19.从预设一级缓存中查找所述当前控件的实例,若查找不到,则从预设二级缓存中查找所述实例。
20.若从所述预设二级缓存中查找不到所述当前控件的所述实例,则根据所述当前控件的配置数据,生成所述当前控件的所述实例,并将所述实例添加至所述预设二级缓存中。
21.可选的,所述当前控件为已经进行过实例化的控件具体为:
22.所述预设二级缓存中存储有所述当前控件的所述实例的控件。
23.可选的,对各循环依赖链执行解绑操作,获得非循环依赖链,包括:
24.对每个循环依赖链:
25.在所述当前控件为已经进行过实例化的控件时,按照沿该循环依赖链执行所述实例化操作的顺序,查找该循环依赖链中依赖于所述当前控件的控件。
26.对所述依赖于所述当前控件的控件,将该控件的依赖数据集合中,所述当前控件的标识符数据进行删除,以使该控件不依赖于所述当前控件。
27.可选的,所述按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从根控件开始,沿所述根控件所处的所述非循环依赖链依次对各控件执行初始化,包括:
28.对每个非循环依赖链中的每个控件:获得该控件的标识符。根据该控件的标识符,从预设数据库中查找对应的控件初始化方法,其中,所述控件初始化方法和所述控件存在对应关系。
29.对每个非循环依赖链:从根控件开始,沿该非循环依赖链,利用控件初始化方法对各控件依次执行初始化。
30.一种控件的初始化系统,所述系统包括:
31.依赖识别模块,用于确定各控件的依赖关系。
32.循环依赖处理模块,基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链。对各循环依赖链执行解绑操作,获得非循环依赖链。
33.初始化执行模块,用于从所述非循环依赖链中确定根控件,其中,所述根控件为不依赖于其他控件的控件。按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从所述根控件开始,沿所述根控件所处的所述非循环依赖链依次对各控件执行初始化。
34.可选的,所述依赖识别模块被设置为:
35.遍历控件集合中的每个控件,按照预设依赖检测规则,判断该目标控件的属性数据是否与其他控件的标识符匹配,若是,则确定该目标控件依赖于该其他控件,并记录该目标控件的依赖关系,其中,所述目标控件是所述控件集合中被检测的控件,所述其他控件时所述控件集合中除所述目标控件外的控件,所述依赖关系包含:该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符。
36.可选的,所述循环依赖处理模块被设置为:
37.根据所述依赖关系,确定各控件所处的依赖链。
38.对每个依赖链:
39.将该依赖链中的任一控件作为初始控件。从所述初始控件开始,沿该依赖链依次
将各控件作为当前控件进行实例化操作,直至当前控件为已经进行过实例化的控件或当前控件在依赖链中不存在其所依赖的控件。
40.若当前控件为已经进行过实例化的控件,则确定该依赖链为循环依赖链。
41.若当前控件在依赖链中不存在其所依赖的控件,则确定该依赖链为初始化执行链。
42.可选的,所述循环依赖处理模块还被设置为:
43.从预设一级缓存中查找所述当前控件的实例,若查找不到,则从预设二级缓存中查找所述实例。
44.若从所述预设二级缓存中查找不到所述当前控件的所述实例,则根据所述当前控件的配置数据,生成所述当前控件的所述实例,并将所述实例添加至所述预设二级缓存中。
45.可选的,所述循环依赖处理模块还被设置为:
46.对每个循环依赖链:
47.在所述当前控件为已经进行过实例化的控件时,按照沿该循环依赖链执行所述实例化操作的顺序,查找该循环依赖链中依赖于所述当前控件的控件。
48.对所述依赖于所述当前控件的控件,将该控件的依赖数据集合中,所述当前控件的标识符数据进行删除,以使该控件不依赖于所述当前控件。
49.可选的,所述初始化执行模块被设置为:
50.对每个非循环依赖链中的每个控件:获得该控件的标识符。根据该控件的标识符,从预设数据库中查找对应的控件初始化方法,其中,所述控件初始化方法和所述控件存在对应关系。
51.对每个非循环依赖链:从根控件开始,沿该非循环依赖链,利用控件初始化方法对各控件依次执行初始化。
52.本发明实施例提供的一种控件的初始化方法、系统、设备及存储介质,通过增加对控件间的循环依赖链关系进行检测和记录的步骤,并对循环依赖链执行解绑操作,使得参与页面初始化进程的各依赖链均为非循环依赖链,避免了页面初始化进程陷入死循环的风险,提高了页面初始化进程的可靠性。同时,本发明通过确定根控件和控件间的依赖关系,确定了页面中各控件的初始化逻辑,避免了由于逻辑错误导致页面初始化进程出现偏差的风险,提高了页面初始化进程的可靠性。可见,本发明实现了提高页面初始化进程可靠性的发明目的。
53.当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
54.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
55.图1为本发明实施例提供的一种控件的初始化方法的流程图;
56.图2为本发明的一个可选实施例提供的一种循环依赖链的示意图;
57.图3为本发明的一个可选实施例提供的一种确定循环依赖链的流程图;
58.图4为本发明实施例提供的一种控件的初始化系统的框图;
59.图5为本发明实施例提供的一种控件的初始化设备的框图。
具体实施方式
60.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
61.本发明实施例提供了一种控件的初始化方法,如图1所示,该方法包括:
62.s101、确定各控件的依赖关系。
63.其中,上述控件可以是在窗体上放置的可视化图形元件,例如:页面中的按钮、对话框和文件编辑框等。
64.可选的,在本发明的一个可选实施例中,上述依赖关系是指:一个控件的功能实现,需要依赖于另一个控件的协助。该依赖关系可以作为页面中控件初始化执行顺序的依据。上述依赖关系的存在形式可以是一个数据集合,该集合中的数据包括但不限于:该控件的基本信息、该控件依赖的控件的基本信息和依赖关系的类型。其中,上述依赖关系的类型包括但不限于:控件值的引用关系和初始化所需的入参依赖关系。
65.s102、基于依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链。
66.可选的,在本发明的一个可选实施例中,上述循环依赖关系可以是指两个控件相互依赖的关系。由于在页面控件初始化的过程中,需要根据依赖关系确定页面中各控件的初始化顺序。在对页面中控件的初始化过程中,由于依赖链中的控件存在上述循环依赖关系,将导致页面的初始化进程出现陷入死循环的风险。本发明通过增加对控件间的循环依赖链关系进行检测和记录的步骤,使得本发明相较于现有技术,降低了页面初始化进程陷入死循环的风险,提高了页面初始化进程的可靠性。
67.s103、对各循环依赖链执行解绑操作,获得非循环依赖链。
68.可选的,在本发明的一个可选实施例中,上述解绑操作的操作对象,可以是循环依赖链中,存在循环依赖关系的控件。具体地,通过对存在循环依赖关系的控件的依赖数据执行上述解绑操作,以使循环依赖链转换为仅存在单向依赖关系的非循环依赖链。本发明通过对循环依赖链执行解绑操作,使得参与页面初始化进程的各依赖链均为非循环依赖链,避免了页面初始化进程陷入死循环的风险,提高了页面初始化进程的可靠性。
69.可选的,在本发明的另一个可选实施例中,上述非循环依赖链可以是该依赖链中的各控件间,均不存在上述循环依赖关系的依赖链。
70.s104、从非循环依赖链中确定根控件,其中,根控件为不依赖于其他控件的控件。
71.可选的,在本发明的一个可选实施例中,上述根控件可以是根据上述依赖关系从非循环依赖链中确定的。
72.s105、按照根控件所处的非循环依赖链中各控件的依赖关系,从根控件开始,沿根控件所处的非循环依赖链依次对各控件执行初始化。
73.可选的,在本发明的一个可选实施例中,本发明通过确定根控件,并根据根控件和
上述依赖关系,确定了对非循环依赖链中的各控件,按照“从根控件开始,沿根控件所处的非循环依赖链依次对各控件执行初始化”的初始化逻辑。由于现有技术是依靠控件加载顺序对页面中的各控件进行初始化,不可避免的会出现由于逻辑错误,导致页面初始化后的展示效果出现偏差。因此,本发明通过确定上述的初始化逻辑,避免了由于逻辑错误导致页面初始化进程出现偏差的风险,提高了页面初始化进程的可靠性。
74.本发明通过增加对控件间的循环依赖链关系进行检测和记录的步骤,并对循环依赖链执行解绑操作,使得参与页面初始化进程的各依赖链均为非循环依赖链,避免了页面初始化进程陷入死循环的风险,提高了页面初始化进程的可靠性。同时,本发明通过确定根控件和控件间的依赖关系,确定了页面中各控件的初始化逻辑,避免了由于逻辑错误导致页面初始化进程出现偏差的风险,提高了页面初始化进程的可靠性。可见,本发明实现了提高页面初始化进程可靠性的发明目的。
75.可选的,上述确定各控件的依赖关系,包括:
76.遍历控件集合中的每个控件,按照预设依赖检测规则,判断该目标控件的属性数据是否与其他控件的标识符匹配,若是,则确定该目标控件依赖于该其他控件,并记录该目标控件的依赖关系,其中,目标控件是控件集合中被检测的控件,其他控件时控件集合中除目标控件外的控件,依赖关系包含:该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符。
77.可选的,在本发明的一个可选实施例中,上述属性数据中的数据类型包括但不限于:依赖于本控件的标识符、控件存储值的引用关系和初始化控件所需的输入参数等。
78.可选的,在本发明的另一个可选实施例中,上述依赖关系中的数据,除上述“该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符”,还可以包括:该目标控件的基本信息和依赖关系的类型等数据。需要说明的是,上述依赖关系及其包含的数据类型,为本领域技术人员公知的技术,本发明对此并不做过多限制和赘述。
79.可选的,在本发明的另一个可选实施例中,上述“判断该目标控件的属性数据是否与其他控件的标识符匹配”的具体实施方式可以是:
80.假设当前存在控件a和控件b两个控件,控件a的属性数据中存储有初始化控件的入参数据。
81.根据控件b的标识符,利用预设单词边界匹配算法在控件a的属性数据中进行匹配。当预设单词边界匹配算法确定控件a的属性数据中的入参数据,与控件b的标识符满足匹配规则时,则确定控件a依赖于控件b。
82.需要说明的是,上述利用预设单词边界匹配算法进行数据匹配校验的实施方式,为本领域技术人员公知的技术手段,本发明在此并不做过多赘述。
83.可选的,基于依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链,包括:
84.根据依赖关系,确定各控件所处的依赖链。
85.对每个依赖链:将该依赖链中的任一控件作为初始控件。从初始控件开始,沿该依赖链依次将各控件作为当前控件进行实例化操作,直至当前控件为已经进行过实例化的控件或当前控件在依赖链中不存在其所依赖的控件。
86.若当前控件为已经进行过实例化的控件,则确定该依赖链为循环依赖链。
87.若当前控件在依赖链中不存在其所依赖的控件,则确定该依赖链为初始化执行链。
88.可选的,上述实例化操作包括:
89.从预设一级缓存中查找当前控件的实例,若查找不到,则从预设二级缓存中查找实例。
90.若从预设二级缓存中查找不到当前控件的实例,则根据当前控件的配置数据,生成当前控件的实例,并将实例添加至预设二级缓存中。
91.可选的,当前控件为已经进行过实例化的控件具体为:
92.预设二级缓存中存储有当前控件的实例的控件。
93.为了对上述“基于依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链”进行说明,在此特结合如图2和图3所示的本发明的一个具体实施例进行解释:
94.为了方便描述,在此设定如图2所示的循环依赖链。该循环依赖链中,包括控件1、控件2和控件3,均用带有标号的圆形表示。其中,控件间的依赖关系为:控件1依赖于控件2,控件2依赖于控件3,控件3依赖于控件1。
95.将控件1确定为初始控件,沿如图2所示的依赖链开始,对各控件进行实例化操作。该实例化操作如图3所示:
96.步骤s301,从预设一级缓存中查找控件1的实例。触发步骤s302。
97.步骤s302,从预设一级缓存中未查找到控件1的实例,创建控件1的实例。触发步骤s303。
98.步骤s303,将控件1的实例添加至预设二级缓存中。触发步骤s304。
99.步骤s304,将控件1加入待初始化集合中。触发步骤s305。
100.步骤s305,从预设一级缓存中查找控件2的实例。触发步骤s306。
101.步骤s306,从预设一级缓存中未查找到控件2的实例,创建控件2的实例。触发步骤s307。
102.步骤s307,将控件2的实例添加至预设二级缓存中。触发步骤s308。
103.步骤s308,将控件2加入待初始化集合中。触发步骤s309。
104.步骤s309,从预设一级缓存中查找控件3的实例。触发步骤s310。
105.步骤s310,从预设一级缓存中未查找到控件3的实例,创建控件3的实例。触发步骤s311。
106.步骤s311,将控件3的实例添加至预设二级缓存中。触发步骤s312。
107.步骤s312,将控件3加入待初始化集合中。触发步骤s313。
108.步骤s313,从预设一级缓存中查找控件1的实例。触发步骤s314。
109.步骤s314,从预设一级缓存中未查找到控件1的实例。触发步骤s315。
110.步骤s315,从预设二级缓存中查找到控件1的实例。并触发步骤s316。
111.可选的,在本发明的一个可选实施例中,在上述步骤s315之后,还可以从待初始化集合中查找控件3的标识符,并进行记录。该控件3的标识符可以用于下述对循环依赖链执行解绑操作。
112.步骤s316,完成实例化,将该依赖链确定为循环依赖链。
113.需要说明的是,本实施例仅为对上述确定循环依赖链的过程进行解释说明。该实
例化操作的技术为本领域技术人员所公知,本发明对此并不做过多限定。
114.可选的,对各循环依赖链执行解绑操作,获得非循环依赖链,包括:
115.对每个循环依赖链:
116.在当前控件为已经进行过实例化的控件时,按照沿该循环依赖链执行实例化操作的顺序,查找该循环依赖链中依赖于当前控件的控件。
117.对依赖于当前控件的控件,将该控件的依赖数据集合中,当前控件的标识符数据进行删除,以使该控件不依赖于当前控件。
118.可选的,按照根控件所处的非循环依赖链中各控件的依赖关系,从根控件开始,沿根控件所处的非循环依赖链依次对各控件执行初始化,包括:
119.对每个非循环依赖链中的每个控件:获得该控件的标识符。根据该控件的标识符,从预设数据库中查找对应的控件初始化方法,其中,控件初始化方法和控件存在对应关系。
120.对每个非循环依赖链:从根控件开始,沿该非循环依赖链,利用控件初始化方法对各控件依次执行初始化。
121.可选的,在本发明的一个可选实施例中,上述控件初始化方法可以存储于预设数据库中。
122.与上述方法实施例相对应的,本发明还提供了一种控件的初始化系统,如图4所示,该系统包括:
123.依赖识别模块401,用于确定各控件的依赖关系。
124.循环依赖处理模块402,基于依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链。对各循环依赖链执行解绑操作,获得非循环依赖链。
125.初始化执行模块403,用于从非循环依赖链中确定根控件,其中,根控件为不依赖于其他控件的控件。按照根控件所处的非循环依赖链中各控件的依赖关系,从根控件开始,沿根控件所处的非循环依赖链依次对各控件执行初始化。
126.可选的,依赖识别模块401被设置为:
127.遍历控件集合中的每个控件,按照预设依赖检测规则,判断该目标控件的属性数据是否与其他控件的标识符匹配,若是,则确定该目标控件依赖于该其他控件,并记录该目标控件的依赖关系,其中,目标控件是控件集合中被检测的控件,其他控件时控件集合中除目标控件外的控件,依赖关系包含:该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符。
128.可选的,循环依赖处理模块402被设置为:
129.根据依赖关系,确定各控件所处的依赖链。
130.对每个依赖链:
131.将该依赖链中的任一控件作为初始控件。从初始控件开始,沿该依赖链依次将各控件作为当前控件进行实例化操作,直至当前控件为已经进行过实例化的控件或当前控件在依赖链中不存在其所依赖的控件。
132.若当前控件为已经进行过实例化的控件,则确定该依赖链为循环依赖链。
133.若当前控件在依赖链中不存在其所依赖的控件,则确定该依赖链为初始化执行链。
134.可选的,循环依赖处理模块402还被设置为:
135.从预设一级缓存中查找当前控件的实例,若查找不到,则从预设二级缓存中查找实例。
136.若从预设二级缓存中查找不到当前控件的实例,则根据当前控件的配置数据,生成当前控件的实例,并将实例添加至预设二级缓存中。
137.可选的,循环依赖处理模块402还被设置为:
138.对每个循环依赖链:
139.在当前控件为已经进行过实例化的控件时,按照沿该循环依赖链执行实例化操作的顺序,查找该循环依赖链中依赖于当前控件的控件。
140.对依赖于当前控件的控件,将该控件的依赖数据集合中,当前控件的标识符数据进行删除,以使该控件不依赖于当前控件。
141.可选的,初始化执行模块403被设置为:
142.对每个非循环依赖链中的每个控件:获得该控件的标识符。根据该控件的标识符,从预设数据库中查找对应的控件初始化方法,其中,控件初始化方法和控件存在对应关系。
143.对每个非循环依赖链:从根控件开始,沿该非循环依赖链,利用控件初始化方法对各控件依次执行初始化。
144.本发明实施例提供了一种控件的初始化设备,如图5所示,该设备包括:
145.处理器501;
146.用于存储处理器601可执行指令的存储器502;
147.其中处理器501被配置为执行指令,以实现如上述任一项的控件的初始化方法。
148.本发明实施例提供了一种计算机存储介质,当计算机可读存储介质中的指令由设备的处理器执行时,使得设备能够执行如上述任一项的控件的初始化方法。
149.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
150.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
151.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
152.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存
在任何这种实际的关系或者顺序。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
153.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
154.以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
技术特征:
1.一种控件的初始化方法,其特征在于,所述方法包括:确定各控件的依赖关系;基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链;对各循环依赖链执行解绑操作,获得非循环依赖链;从所述非循环依赖链中确定根控件,其中,所述根控件为不依赖于其他控件的控件;按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从所述根控件开始,沿所述根控件所处的所述非循环依赖链依次对各控件执行初始化。2.根据权利要求1所述的方法,其特征在于,所述确定各控件的依赖关系,包括:遍历控件集合中的每个控件,按照预设依赖检测规则,判断该目标控件的属性数据是否与其他控件的标识符匹配,若是,则确定该目标控件依赖于该其他控件,并记录该目标控件的依赖关系,其中,所述目标控件是所述控件集合中被检测的控件,所述其他控件时所述控件集合中除所述目标控件外的控件,所述依赖关系包含:该目标控件的标识符和该目标控件依赖的至少一个其他控件的标识符。3.根据权利要求2所述的方法,其特征在于,所述基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链,包括:根据所述依赖关系,确定各控件所处的依赖链;对每个依赖链:将该依赖链中的任一控件作为初始控件;从所述初始控件开始,沿该依赖链依次将各控件作为当前控件进行实例化操作,直至当前控件为已经进行过实例化的控件或当前控件在依赖链中不存在其所依赖的控件;若当前控件为已经进行过实例化的控件,则确定该依赖链为循环依赖链;若当前控件在依赖链中不存在其所依赖的控件,则确定该依赖链为初始化执行链。4.根据权利要求3所述的方法,其特征在于,所述实例化操作包括:从预设一级缓存中查找所述当前控件的实例,若查找不到,则从预设二级缓存中查找所述实例;若从所述预设二级缓存中查找不到所述当前控件的所述实例,则根据所述当前控件的配置数据,生成所述当前控件的所述实例,并将所述实例添加至所述预设二级缓存中。5.根据权利要求4所述的方法,其特征在于,所述当前控件为已经进行过实例化的控件具体为:所述预设二级缓存中存储有所述当前控件的所述实例的控件。6.根据权利要求3所述的方法,其特征在于,对各循环依赖链执行解绑操作,获得非循环依赖链,包括:对每个循环依赖链:在所述当前控件为已经进行过实例化的控件时,按照沿该循环依赖链执行所述实例化操作的顺序,查找该循环依赖链中依赖于所述当前控件的控件;对所述依赖于所述当前控件的控件,将该控件的依赖数据集合中,所述当前控件的标识符数据进行删除,以使该控件不依赖于所述当前控件。7.根据权利要求1所述的方法,其特征在于,所述按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从根控件开始,沿所述根控件所处的所述非循环依赖链依次对
各控件执行初始化,包括:对每个非循环依赖链中的每个控件:获得该控件的标识符;根据该控件的标识符,从预设数据库中查找对应的控件初始化方法,其中,所述控件初始化方法和所述控件存在对应关系;对每个非循环依赖链:从根控件开始,沿该非循环依赖链,利用控件初始化方法对各控件依次执行初始化。8.一种控件的初始化系统,其特征在于,所述系统包括:依赖识别模块,用于确定各控件的依赖关系;循环依赖处理模块,基于所述依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链;对各循环依赖链执行解绑操作,获得非循环依赖链;初始化执行模块,用于从所述非循环依赖链中确定根控件,其中,所述根控件为不依赖于其他控件的控件;按照所述根控件所处的非循环依赖链中各控件的所述依赖关系,从所述根控件开始,沿所述根控件所处的所述非循环依赖链依次对各控件执行初始化。9.一种控件的初始化设备,其特征在于,所述设备包括:处理器;用于存储所述处理器可执行指令的存储器;其中所述处理器被配置为执行所述指令,以实现如上述权利要求1至7中任一项所述的控件的初始化方法。10.一种计算机存储介质,其特征在于,当所述计算机可读存储介质中的指令由所述设备的所述处理器执行时,使得所述设备能够执行如权利要求1至7中任一项所述的控件的初始化方法。
技术总结
本发明实施例提供了一种控件的初始化方法、系统、设备及存储介质,该方法包括:确定各控件的依赖关系,基于依赖关系,确定具有循环依赖关系的各控件构成的循环依赖链,对各循环依赖链执行解绑操作,获得非循环依赖链,从非循环依赖链中确定根控件,按照根控件所处的非循环依赖链中各控件的依赖关系,从根控件开始,沿根控件所处的非循环依赖链依次对各控件执行初始化。本发明通过增加对控件间的循环依赖链关系进行检测和记录的步骤,并对循环依赖链执行解绑操作,避免了页面初始化进程陷入死循环的风险,提高了页面初始化进程的可靠性。可见,本发明实现了提高页面初始化进程可靠性的发明目的。的发明目的。的发明目的。
技术研发人员:江春华 隗刚 陈显龙 李鑫 汪晓旸 林宇
受保护的技术使用者:北京恒华伟业科技股份有限公司
技术研发日:2022.02.18
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-8949.html