本發(fā)明涉及軟件開發(fā)領(lǐng)域,更具體地,涉及一種配置文件的設(shè)置方法及裝置。
背景技術(shù):
在軟件開發(fā)的過程中,當(dāng)開發(fā)者需要使用一個(gè)新的組件或者工具的時(shí)候,首先需要對該組件或工具進(jìn)行配置然后再使用。在開發(fā)階段需要進(jìn)行的配置,一般是環(huán)境配置和變量配置,比如數(shù)據(jù)庫連接信息、程序結(jié)構(gòu)和程序樣式等。
現(xiàn)有技術(shù)中對組件或工具進(jìn)行配置的過程如下:首先通過配置類構(gòu)造函數(shù)創(chuàng)建出一個(gè)配置對象的實(shí)例,然后再多次調(diào)用這個(gè)配置對象的各個(gè)設(shè)置函數(shù)對這個(gè)配置對象進(jìn)行相應(yīng)地配置項(xiàng)設(shè)置。在此過程中,會多次調(diào)用該配置對象,還需要將這個(gè)配置對象實(shí)例維護(hù)到內(nèi)存中進(jìn)行保存。
現(xiàn)有技術(shù)存在如下問題:多次調(diào)用該配置對象會造成代碼可讀性差,對哪些配置項(xiàng)進(jìn)行了設(shè)置以及還需要對哪些配置項(xiàng)進(jìn)行設(shè)置都需要手動排查,并且后期需要更改配置時(shí),技術(shù)人員需要手動查找要修改的配置項(xiàng)的位置,造成后期維護(hù)困難。尤其當(dāng)組件或者工具非常龐大的時(shí)候,開發(fā)人員往往需要進(jìn)行大量的配置工作,整個(gè)配置的過程會異常地繁瑣和復(fù)雜,開發(fā)人員編寫配置文件的效率非常低,進(jìn)而導(dǎo)致整個(gè)軟件開發(fā)的成本較高。
技術(shù)實(shí)現(xiàn)要素:
為了能夠克服或者至少部分地解決現(xiàn)有技術(shù)中存在的代碼可讀性差、后期維護(hù)困難、配置過程繁瑣復(fù)雜、開發(fā)效率低且開發(fā)成本高的問題,本發(fā)明提供一種配置文件的設(shè)置方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供一種配置文件的設(shè)置方法,包括:
通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中。
其中,所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中的步驟之前還包括:
創(chuàng)建一個(gè)配置對象或者調(diào)用一個(gè)配置對象。
其中,所述創(chuàng)建一個(gè)配置對象包括:采用單例模式創(chuàng)建一個(gè)單例配置對象;相應(yīng)地,所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中包括:
通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入所述單例配置對象中。
其中,所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中包括:
s1,調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第一次設(shè)置完成的所述配置對象;
s2,k分別取值為從2到n順序執(zhí)行下述步驟:調(diào)用第k設(shè)置函數(shù)對k-1次設(shè)置完成的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第k次設(shè)置完成的所述配置對象,其中,n為配置信息的總項(xiàng)數(shù);
s3,完成所有配置信息的設(shè)置后,通過結(jié)束函數(shù)返回最終設(shè)置完成的所述配置對象。
其中,所述采用單例模式創(chuàng)建一個(gè)單例配置對象包括:
定義一個(gè)全局靜態(tài)變量;
定義一個(gè)全局靜態(tài)函數(shù),其中,在所述全局靜態(tài)函數(shù)的內(nèi)部,首先判斷所述全局靜態(tài)變量是否為空,若為空,則進(jìn)入同步代碼塊對所述全局靜態(tài)變量進(jìn)行第二次判斷是否為空;若為空,則調(diào)用配置類的構(gòu)造函數(shù)創(chuàng)建出一個(gè)配置類對象的實(shí)例,并將所述配置類對象的實(shí)例賦給所述全局靜態(tài)變量,返回所述全局靜態(tài)變量。
其中,所述創(chuàng)建一個(gè)配置對象或者調(diào)用一個(gè)現(xiàn)有配置對象的步驟之前還包括:
從后臺服務(wù)器獲取配置文件,解析所述配置文件從而獲取所述配置文件中的配置信息。
其中,所述解析所述配置文件從而獲取所述配置文件中的配置信息的步驟之后還包括:
將所述配置信息存儲至本地緩存文件;
當(dāng)無法從后臺服務(wù)器獲取配置文件時(shí),獲取本地緩存文件中所存儲的上一次通過解析所獲取的配置信息。
其中,所述配置信息包括配置項(xiàng)、配置參數(shù)和配置文件中所保存的數(shù)據(jù)中的一個(gè)或者多個(gè)。
根據(jù)本發(fā)明的另一個(gè)方面,提供一種配置信息的設(shè)置裝置,包括:設(shè)置模塊,用于通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中。
其中,所述設(shè)置模塊具體用于:
調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第一次設(shè)置完成的所述配置對象;
k分別取值為從2到n順序執(zhí)行下述步驟:調(diào)用第k設(shè)置函數(shù)對k-1次設(shè)置完成的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第k次設(shè)置完成的所述配置對象,其中,n為配置信息的總項(xiàng)數(shù);
完成所有配置信息的設(shè)置后,通過結(jié)束函數(shù)返回最終設(shè)置完成的所述配置對象。
本發(fā)明提供的一種配置文件的設(shè)置方法及裝置,通過采用鏈?zhǔn)秸{(diào)用設(shè)置函數(shù)對配置對象進(jìn)行配置信息的設(shè)置,配置過程簡單、代碼清晰且后期維護(hù)方便,能夠提高開發(fā)人員配置的效率,降低開發(fā)成本。
附圖說明
圖1為本發(fā)明一實(shí)施例提供的一種配置文件的設(shè)置方法的流程示意圖;
圖2為本發(fā)明另一實(shí)施例提供的一種配置文件的設(shè)置方法的流程示意圖;
圖3為本發(fā)明另一實(shí)施例提供的基于圖1中步驟s12所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入所述配置對象中的流程示意圖;
圖4為本發(fā)明另一實(shí)例提供的基于圖2中步驟s21所述采用單例模式創(chuàng)建一個(gè)單例配置對象的流程示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
本發(fā)明一實(shí)施例提供一種配置文件的設(shè)置方法,包括:
通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中。
在程序開發(fā)過程中,開發(fā)人員要使用某個(gè)組件或工具時(shí),需要根據(jù)組件或工具提供的配置文件中的配置項(xiàng)或配置參數(shù)對組件或工具進(jìn)行相應(yīng)地配置后才能夠開始使用。配置文件中保存的數(shù)據(jù)對程序的執(zhí)行有指導(dǎo)性作用。因此,如何快速地將配置文件中的配置信息設(shè)置好,對于提高程序的開發(fā)效率至關(guān)重要。
現(xiàn)有技術(shù)中每設(shè)置一項(xiàng)配置信息的設(shè)置過程都需要調(diào)用對應(yīng)的設(shè)置函數(shù),采用的是object.method()形式的調(diào)用,當(dāng)要設(shè)置的配置信息的項(xiàng)數(shù)多達(dá)幾十上百個(gè)時(shí),代碼中就會出現(xiàn)相應(yīng)數(shù)目的object.method()形式的調(diào)用,采用這種形式的調(diào)用方法進(jìn)行配置設(shè)置無疑是非常繁瑣的。
具體地,鏈?zhǔn)秸{(diào)用指的是如下調(diào)用形式:
object.method1().method2().method3().method4()……;
一般的設(shè)置函數(shù)是個(gè)無返回值的void方法,只是單純的去執(zhí)行設(shè)置邏輯,但是鏈?zhǔn)秸{(diào)用中的每個(gè)設(shè)置函數(shù)除了執(zhí)行設(shè)置邏輯外,還在設(shè)置完成后,將這個(gè)配置類對象本身返回了,所以object.method()只是一句調(diào)用,但是鏈?zhǔn)秸{(diào)用中的object.method1()不僅僅是一句調(diào)用語句,它本身就是該配置類對象,可以重復(fù)地調(diào)用方法,即可以在一次設(shè)置完成后,再次調(diào)用另一個(gè)設(shè)置函數(shù)對已經(jīng)進(jìn)行過設(shè)置的所述配置類型對象進(jìn)行再一次地設(shè)置,通過在上一次設(shè)置完成的配置對象的基礎(chǔ)上,調(diào)用不同的設(shè)置函數(shù)來完成所有配置信息的設(shè)置,最終實(shí)現(xiàn)將所有配置信息寫入配置對象中,完成配置過程。采用鏈?zhǔn)秸{(diào)用可以明顯減少代碼量,并且對哪些配置信息進(jìn)行了設(shè)置會非常清晰,特別是在配置大型組件或工具時(shí),當(dāng)需要設(shè)置的配置信息的數(shù)量很多時(shí),采用鏈?zhǔn)秸{(diào)用方式能夠有效減少代碼編寫量,提升配置效率。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過采用鏈?zhǔn)秸{(diào)用設(shè)置函數(shù)對配置對象進(jìn)行配置信息的設(shè)置,配置過程簡單、代碼清晰且非常便于后期維護(hù),能夠提高開發(fā)人員配置的效率,降低開發(fā)成本。
下面以對系統(tǒng)日志進(jìn)行配置為例來說明本發(fā)明實(shí)施例的技術(shù)方案,通常在系統(tǒng)日志中需要配置如下相關(guān)信息:日志開關(guān)信息、應(yīng)用上下文信息、日志標(biāo)記信息以及日志等級信息等,具體地,可以采用如下代碼對上述配置信息進(jìn)行設(shè)置:
通過一系列設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將日志開關(guān)信息true、應(yīng)用上下文信息、日志標(biāo)記信息“test”和日志等級信息3,全部寫入所述配置對象logconfig中。每調(diào)用一個(gè)設(shè)置函數(shù)在設(shè)置完成后都會返回logconfig對象本身,因此可以在logconfig.setswitch(true)的基礎(chǔ)上繼續(xù)調(diào)用下一設(shè)置函數(shù)setcontext,直到完成日志開關(guān)信息、應(yīng)用上下文信息、日志標(biāo)記信息以及日志等級信息等配置信息的設(shè)置過程。
如圖1所示,為本發(fā)明另一實(shí)施例提供的一種配置文件的設(shè)置方法的流程示意圖,包括:
s11,創(chuàng)建一個(gè)配置對象或者調(diào)用一個(gè)配置對象;
s12,通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中。
具體地,成員函數(shù)使用之前都需要先創(chuàng)建對象,再通過對象調(diào)用成員函數(shù)。本發(fā)明實(shí)施例步驟s11中創(chuàng)建一個(gè)配置對象前提是已經(jīng)定義了一個(gè)配置類,通過這個(gè)配置類的實(shí)例化創(chuàng)建一個(gè)配置對象,然后調(diào)用設(shè)置函數(shù)將需要設(shè)置的配置信息寫入,后續(xù)服務(wù)進(jìn)程可以調(diào)用這個(gè)配置類從而完成相應(yīng)地配置。創(chuàng)建一個(gè)配置對象是通過調(diào)用配置類的構(gòu)造函數(shù)實(shí)現(xiàn)的?;蛘撸嬖谝粋€(gè)現(xiàn)有配置對象,直接調(diào)用即可。
步驟s12在上一個(gè)實(shí)施例中已經(jīng)詳細(xì)闡述,在此不再贅述。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過采用鏈?zhǔn)秸{(diào)用設(shè)置函數(shù)對新創(chuàng)建的或已有的配置對象進(jìn)行配置信息的設(shè)置,配置過程簡單、代碼清晰,能夠提高開發(fā)人員配置的效率,降低開發(fā)成本。
下面同樣以對系統(tǒng)日志進(jìn)行配置為例來說明本發(fā)明實(shí)施例的技術(shù)方案,具體地,可以采用如下代碼實(shí)現(xiàn):
首先,通過日志配置類logconfig的構(gòu)造函數(shù)logconfig()實(shí)例化一個(gè)配置對象logconfig,然后,通過一系列設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將日志開關(guān)信息true、應(yīng)用上下文信息、日志標(biāo)記信息“test”和日志等級信息3,全部寫入所述配置對象logconfig中并返回配置對象logconfig本身。
或者,采用如下代碼對上述配置信息進(jìn)行設(shè)置:
通過日志配置類的構(gòu)造函數(shù)去鏈?zhǔn)秸{(diào)用一系列的設(shè)置函數(shù),因?yàn)闃?gòu)造函數(shù)會返回創(chuàng)建的對象本身,因此也可以重復(fù)調(diào)用方法,完成日志開關(guān)信息、應(yīng)用上下文信息、日志標(biāo)記信息以及日志等級信息等配置信息的設(shè)置過程。
如圖2所示,為本發(fā)明另一實(shí)施例提供的一種配置文件的設(shè)置方法的流程示意圖,包括:
s21,采用單例模式創(chuàng)建一個(gè)單例配置對象;
s22,通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入所述單例配置對象中。
具體地,步驟s21中所述單例模式(singleton模式)可以確保類只有一個(gè)實(shí)例存在,所述單例配置對象是指唯一的配置類對象的實(shí)例。采用單例模式創(chuàng)建一個(gè)單例配置對象是指在全局有且僅有一個(gè)配置類對象的實(shí)例存在,外部調(diào)用者可以很方便地找到這個(gè)配置類對象,并對這個(gè)配置類對象進(jìn)行調(diào)用從而獲得相關(guān)的配置信息。采用單例模式的優(yōu)點(diǎn)是由于只通過一個(gè)對象進(jìn)行配置管理,可以減少系統(tǒng)資源開銷,并且由于外部調(diào)用者每次都獲取已經(jīng)存在的對象,因此可以提高創(chuàng)建速度,同時(shí)在任何地方使用此對象都是同一個(gè)對象,可以避免多實(shí)例創(chuàng)建使用時(shí)產(chǎn)生的程序邏輯錯(cuò)誤。
采用單例模式創(chuàng)建一個(gè)單例配置對象的具體實(shí)現(xiàn)方式可以概括為以下步驟:創(chuàng)建一個(gè)配置類型的private靜態(tài)變量;創(chuàng)建一個(gè)public靜態(tài)函數(shù),用于將通過調(diào)用配置類的構(gòu)造函數(shù)所創(chuàng)建的唯一實(shí)例返回給外部調(diào)用者。
步驟s22中所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入所述單例配置對象中是指在創(chuàng)建一個(gè)單例配置對象后,基于這個(gè)單例配置對象,采用鏈?zhǔn)秸{(diào)用方式將需要進(jìn)行設(shè)置的配置信息設(shè)置好,最終返回設(shè)置好的所述單例配置對象。每一個(gè)設(shè)置函數(shù)在完成相應(yīng)的配置信息處理后都會返回所述單例配置對象,這樣下一個(gè)設(shè)置函數(shù)就可以基于上一次設(shè)置好的單例配置對象來繼續(xù)進(jìn)行設(shè)置處理了,直至最終完成所有配置信息的設(shè)置。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過采用單例模式創(chuàng)建一個(gè)單例配置對象,并通過鏈?zhǔn)秸{(diào)用的方式完成配置信息的設(shè)置過程,使得全局有且僅有一個(gè)配置類對象存在,外部調(diào)用者可以很方便地找到這個(gè)配置類對象并獲取相關(guān)的配置信息,使得配置過程很方便管理,并且可以避免多實(shí)例創(chuàng)建并使用時(shí)產(chǎn)生的程序邏輯錯(cuò)誤。
下面同樣以對系統(tǒng)日志進(jìn)行配置為例來說明本發(fā)明實(shí)施例的技術(shù)方案。具體地,可以采用如下代碼對系統(tǒng)日志中的各種配置信息進(jìn)行設(shè)置:
privatestaticlogconfiginstance;
publicstaticlogconfiggetinstance(){
//創(chuàng)建唯一配置對象類的實(shí)例,并賦給instance
returninstance;
}
publiclogconfigsetcontext(contextcontext){
//處理數(shù)據(jù)
returninstance;
}
logconfiglogconfig=logconfig().getinstance().setswitch(true)
.setcontext(this)
.settag(“test”)
.setlevel(3)
.over();
首先采用單例模式創(chuàng)建一個(gè)單例配置對象,創(chuàng)建的過程如下:定義一個(gè)logconfig類型的private靜態(tài)變量instance;然后定義一個(gè)public靜態(tài)函數(shù)getinstance(),在這個(gè)public靜態(tài)函數(shù)getinstance()的內(nèi)部通過調(diào)用構(gòu)造函數(shù)logconfig()創(chuàng)建唯一的配置類對象,并賦給private靜態(tài)變量instance,此時(shí)instance即為所創(chuàng)建的唯一的配置類對象的實(shí)例,然后通過return語句返回所述instance。然后,通過鏈?zhǔn)秸{(diào)用的方式將配置信息寫入所述單例配置對象instance中。每一個(gè)設(shè)置函數(shù)在完成數(shù)據(jù)處理后都會返回所述單例配置對象instance,這樣下一個(gè)設(shè)置函數(shù)就可以基于上次的instance對象來繼續(xù)進(jìn)行設(shè)置處理了。
在上述實(shí)施例的基礎(chǔ)上,如圖3所示,為本發(fā)明另一實(shí)施例提供的基于圖1中步驟s12所述通過設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置文件中的配置信息寫入配置對象中的流程示意圖,包括:
s31,調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第一次設(shè)置完成的所述配置對象;
s32,k分別取值為從2到n順序執(zhí)行下述步驟:調(diào)用第k設(shè)置函數(shù)對k-1次設(shè)置完成的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第k次設(shè)置完成的所述配置對象,其中,n為配置信息的總項(xiàng)數(shù);
s33,完成所有配置信息的設(shè)置后,通過結(jié)束函數(shù)返回最終設(shè)置完成的所述配置對象。
需要說明的是,此處和權(quán)利要求中使用的“第一”、“第二”、“第k”等術(shù)語僅僅是為了區(qū)別不同的描述對象,而并非有意限制任何時(shí)間或者空間上的順序。
具體地,步驟s31中調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,通過調(diào)用第一設(shè)置函數(shù),在第一設(shè)置函數(shù)的內(nèi)部會通過參數(shù)傳遞的形式將具體的配置信息寫入配置對象中,完成設(shè)置邏輯,在每次設(shè)置完成后通過return語句返回第一次設(shè)置好的配置對象。這樣當(dāng)進(jìn)行步驟s32時(shí),直接繼續(xù)調(diào)用第二設(shè)置函數(shù)對所述第一次設(shè)置好的配置對象進(jìn)行設(shè)置,并返回第二次設(shè)置好的配置對象。然后繼續(xù)調(diào)用第三設(shè)置函數(shù)對所述第二次設(shè)置好的配置對象進(jìn)行設(shè)置,……,調(diào)用第k設(shè)置函數(shù)對第k-1次設(shè)置好的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,……,調(diào)用第n設(shè)置函數(shù)對第n-1次設(shè)置好的所述配置對象進(jìn)行第n項(xiàng)配置信息的設(shè)置,并返回第n次設(shè)置完成的配置對象。n為配置信息的總項(xiàng)數(shù),根據(jù)實(shí)際需要進(jìn)行多少項(xiàng)配置信息的設(shè)置而定。下一項(xiàng)配置信息的設(shè)置都是基于前一次配置完成的配置對象,就像環(huán)形一樣的一直設(shè)置下去直到所有配置信息設(shè)置完成。最后,步驟s33通過調(diào)用結(jié)束函數(shù)將最終設(shè)置好的配置對象進(jìn)行返回。所述結(jié)束函數(shù)內(nèi)部僅僅是將最終設(shè)置好的配置對象進(jìn)行返回,而不做其他任何處理,以便于外部服務(wù)程序調(diào)用最終設(shè)置好的配置對象。
同樣以對系統(tǒng)日志進(jìn)行配置為例,上述各步驟可以通過如下代碼實(shí)現(xiàn):
首先調(diào)用第一設(shè)置函數(shù)setswitch對所述配置對象進(jìn)行日志開關(guān)信息的設(shè)置,在設(shè)置完成后,通過return語句返回第一次設(shè)置好的所述配置對象logconfig;然后,調(diào)用第二設(shè)置函數(shù)setcontext對第一次設(shè)置好的所述配置對象進(jìn)行應(yīng)用上下文信息的設(shè)置,在設(shè)置完成后,返回第二次設(shè)置好的所述配置對象logconfig;重復(fù)上述步驟,依次對所述配置對象logconfig進(jìn)行日志標(biāo)記信息和日志等級信息的設(shè)置,最后,通過over()函數(shù)返回最終設(shè)置好的所述配置對象logconfig。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過采用鏈?zhǔn)秸{(diào)用的方式進(jìn)行配置信息的設(shè)置,可以直接在原先配置的基礎(chǔ)上進(jìn)行下一項(xiàng)配置的設(shè)置,極大的提高了設(shè)置配置的效率,使得代碼閱讀性更加明朗,更加方便后期對其進(jìn)行維護(hù)和升級。
在上述實(shí)例例的基礎(chǔ)上,如圖4所示,為本發(fā)明另一實(shí)例提供的基于圖2中步驟s21所述采用單例模式創(chuàng)建一個(gè)單例配置對象的流程示意圖,包括:
s41,定義一個(gè)全局靜態(tài)變量;
s42,定義一個(gè)全局靜態(tài)函數(shù),其中,在所述全局靜態(tài)函數(shù)的內(nèi)部,首先判斷所述全局靜態(tài)變量是否為空,若為空,則進(jìn)入同步代碼塊對所述全局靜態(tài)變量進(jìn)行第二次判斷是否為空,若為空,則調(diào)用配置類的構(gòu)造函數(shù)創(chuàng)建出一個(gè)配置類對象的實(shí)例,并將所述配置類對象的實(shí)例賦給所述全局靜態(tài)變量,返回所述全局靜態(tài)變量。
前面已經(jīng)提及單例模式指的是全局有且僅有一個(gè)對象存在,本發(fā)明實(shí)施例提供一種采用單例模式創(chuàng)建一個(gè)單例配置對象的具體方法。具體地,步驟s41中定義一個(gè)全局靜態(tài)變量的目的是使用靜態(tài)方法對配置對象進(jìn)行封裝使得該配置對象能夠在全局任意位置獲取到。步驟s42定義了一個(gè)全局靜態(tài)函數(shù),用于創(chuàng)建一個(gè)靜態(tài)訪問點(diǎn),將創(chuàng)建的唯一實(shí)例返回給外部調(diào)用者,將所述全局靜態(tài)函數(shù)定義為靜態(tài)的目的是可以在任意其他函數(shù)中很方便的獲取到該全局靜態(tài)函數(shù)的引用。
為了更清晰地描述本發(fā)明實(shí)施例所提供的采用單例模式創(chuàng)建一個(gè)單例對象的具體方法,結(jié)合如下代碼進(jìn)行說明:
在所述全局靜態(tài)函數(shù)的內(nèi)部,有雙重判斷和同步代碼塊,加同步代碼塊的目的是為了解決線程安全問題,而雙重判斷是為了解決效率問題。具體思路是首先檢查是否已經(jīng)創(chuàng)建了實(shí)例,如果還沒有創(chuàng)建,才進(jìn)行同步,這樣就只進(jìn)行一次同步,從而提高了效率。
具體地,首先判定全局靜態(tài)變量instance是否為空,通過if(instance==null)來進(jìn)行判定的。如果instance為空,說明配置對象實(shí)例還沒有創(chuàng)建,則進(jìn)行第二次校驗(yàn),之所以要進(jìn)行二次校驗(yàn)的目的是為了防止多線程并發(fā)從而導(dǎo)致的單例失敗,創(chuàng)建了多個(gè)實(shí)例。
為了防止并發(fā)引起單例出現(xiàn)問題,在進(jìn)入第二次校驗(yàn)處加了一個(gè)同步代碼塊synchronized,被synchronized修飾的代碼塊同一時(shí)間只能有一個(gè)線程可以執(zhí)行,如果有一個(gè)線程進(jìn)入到同步代碼塊中,另外的線程都不能再進(jìn)入這樣就避免了因?yàn)椴l(fā)從而引起的多個(gè)實(shí)例的出現(xiàn)。
在同步代碼塊中再次對instance進(jìn)行判定,如果進(jìn)入到同步代碼塊的線程判定instance依舊是空,也就是if(instance==null)這個(gè)判斷條件依舊是真的,此時(shí)才開始logconfig真正的實(shí)例化操作。
logconfig實(shí)例化操作是通過調(diào)用logconfig的構(gòu)造函數(shù)來進(jìn)行實(shí)例化實(shí)現(xiàn)的,具體是通過instance=newlogconfig();的方式來進(jìn)行實(shí)例化,首先,調(diào)用配置類的構(gòu)造函數(shù)創(chuàng)建出一個(gè)配置類對象的實(shí)例,并將所述配置類對象的實(shí)例賦給所述全局靜態(tài)變量instance,實(shí)例化完成后將實(shí)例化對象instance返回出去。
當(dāng)再次調(diào)用getinstance()時(shí),首先會去判定instance是否為空,由于已經(jīng)對instance進(jìn)行實(shí)例化了,此時(shí)instance不為空,此時(shí)直接將原先實(shí)例化的instance進(jìn)行返回,這樣調(diào)用者就能夠快速的獲取到需要的logconfig配置對象了。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過使用單例模式,確保了整個(gè)應(yīng)用中有且僅有一個(gè)配置對象的實(shí)例存在,并且通過引入雙重判斷和同步代碼塊,避免了因?yàn)槎嗑€程并非從而導(dǎo)致單例可能被多次實(shí)例化的問題,解決了線程安全問題的同時(shí)提高了效率。
本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述創(chuàng)建一個(gè)配置對象或者調(diào)用一個(gè)現(xiàn)有配置對象的步驟之前還包括:
從后臺服務(wù)器獲取配置文件,解析所述配置文件從而獲取所述配置信息。
具體地,在開始創(chuàng)建配置對象進(jìn)行配置過程之前,需要獲取配置信息。配置信息存儲在配置文件中,配置文件是具有規(guī)范化數(shù)據(jù)格式的變量保存文件,采用的數(shù)據(jù)格式可以是xml格式、yaml格式或json格式等。通常需要將配置文件進(jìn)行解析從而獲得所需要的配置信息。每次系統(tǒng)啟動的時(shí)候通過網(wǎng)絡(luò)從后臺服務(wù)獲取配置文件,然后對所述配置文件進(jìn)行解析得到我們需要的配置信息。然后通過一系列的設(shè)置函數(shù)將我們解析好的配置信息設(shè)置到配置對象中,這樣配置文件都是從服務(wù)器后臺來進(jìn)行獲取的,大大提高了配置文件的動態(tài)性。后續(xù)如果因?yàn)闃I(yè)務(wù)需求需要調(diào)整配置信息的設(shè)置,只需要在后臺進(jìn)行更改后,客戶端下次啟動的時(shí)候就會使用新的配置信息來進(jìn)行配置了。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過從后臺服務(wù)器獲取配置信息,能夠極大地提高配置過程的動態(tài)性和靈活性。
本發(fā)明另一實(shí)施例,在上述述實(shí)施例的基礎(chǔ)上,解析所述配置文件從而獲取所述配置文件中的配置信息的步驟之后還包括:
將所述配置信息存儲至本地緩存文件;
當(dāng)無法從后臺服務(wù)器獲取配置文件時(shí),獲取本地緩存文件中所存儲的上一次通過解析所獲取的配置信息。
具體地,為了防止網(wǎng)絡(luò)出現(xiàn)問題或者出現(xiàn)從后臺服務(wù)器無法獲取到配置文件的問題,先將上一次解析正確的配置信息存儲至本地緩存文件中,如果通過網(wǎng)絡(luò)獲取配置文件的時(shí)候發(fā)現(xiàn)無法獲取,則獲取本地緩存文件中的上一次解析所獲取的配置信息,此時(shí)就直接使用本地緩存文件中的配置信息來進(jìn)行配置。
本發(fā)明實(shí)施例提供的一種配置文件的設(shè)置方法,通過獲取到的配置信息進(jìn)行緩存,可以避免從后臺服務(wù)器無法獲取到配置信息時(shí)無法完成配置的問題,降低了配置的難度。
本發(fā)明另一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述配置信息包括配置項(xiàng)、配置參數(shù)和配置文件中所保存的數(shù)據(jù)中的一個(gè)或者多個(gè)。
具體地,配置項(xiàng)保存了系統(tǒng)和項(xiàng)目的相關(guān)配置,軟件、硬件、文檔等各類信息每發(fā)生一次變更,都要更新配置項(xiàng),以便于更好的維護(hù)系統(tǒng)。每一個(gè)網(wǎng)絡(luò)應(yīng)用或網(wǎng)絡(luò)服務(wù)所對應(yīng)的應(yīng)用程序中都會用到一些環(huán)境變量,這些環(huán)境變量的具體數(shù)值可能隨應(yīng)用程序的運(yùn)行環(huán)境改變而發(fā)生變化,為此,通常將這些環(huán)境變量存儲在配置文件中,當(dāng)應(yīng)用程序啟動時(shí),通過加載該配置文件來獲取環(huán)境變量的具體數(shù)值,環(huán)境變量即是一種配置參數(shù)。目前包括軟件系統(tǒng)和硬件系統(tǒng)在內(nèi)的各類系統(tǒng)通常使用配置文件來記錄關(guān)于其配置的信息或者參數(shù),配置文件中所保存的數(shù)據(jù)即為關(guān)于其配置的信息或參數(shù)。本發(fā)明實(shí)施例中的配置信息包括配置項(xiàng)、配置參數(shù)、配置文件中所保存的數(shù)據(jù)中的一個(gè)或多個(gè)。
本發(fā)明另一實(shí)施例提供一種配置信息的設(shè)置裝置,包括:設(shè)置模塊,用于通過一系列設(shè)置函數(shù)的鏈?zhǔn)秸{(diào)用將配置信息寫入所述配置對象中。
具體地,設(shè)置模塊采用的鏈?zhǔn)秸{(diào)用的具體形式為:
object.method1().method2().method3().method4()……
一般的設(shè)置函數(shù)是個(gè)無返回值的void方法,只是單純的去執(zhí)行設(shè)置邏輯,但是鏈?zhǔn)秸{(diào)用中的每個(gè)設(shè)置函數(shù)除了執(zhí)行設(shè)置邏輯外,還在設(shè)置完成后,將這個(gè)配置類對象本身返回了,即鏈?zhǔn)秸{(diào)用中的object.method1()不僅僅是一句調(diào)用語句,它本身就是該配置類對象,可以重復(fù)地調(diào)用方法,即可以在一次設(shè)置完成后,再次調(diào)用另一個(gè)設(shè)置函數(shù)對已經(jīng)進(jìn)行過設(shè)置的所述配置類型對象進(jìn)行再一次地設(shè)置,通過重復(fù)地調(diào)用不同的設(shè)置函數(shù)完成所有的配置信息的設(shè)置。采用鏈?zhǔn)秸{(diào)用可以明顯減少代碼量,并且對哪些配置信息進(jìn)行了設(shè)置會非常清晰,特別是在配置大型組件或工具時(shí),采用鏈?zhǔn)秸{(diào)用方式能夠有效減少代碼編寫量,提升配置效率。
本發(fā)明實(shí)施例提供的一種配置信息的設(shè)置裝置,設(shè)置模塊通過采用鏈?zhǔn)秸{(diào)用設(shè)置函數(shù)對配置對象進(jìn)行配置信息的設(shè)置,配置過程簡單、代碼清晰且后期維護(hù)方便,能夠提高開發(fā)人員配置的效率,降低開發(fā)成本。
本發(fā)明又一實(shí)施例,在上述實(shí)施例的基礎(chǔ)上,所述設(shè)置模塊具體用于:
調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第一次設(shè)置完成的所述配置對象;
k分別取值為從2到n順序執(zhí)行下述步驟:調(diào)用第k設(shè)置函數(shù)對k-1次設(shè)置完成的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,在設(shè)置完成后,返回第k次設(shè)置完成的所述配置對象,其中,n為配置信息的總項(xiàng)數(shù);
完成所有配置信息的設(shè)置后,通過結(jié)束函數(shù)返回最終設(shè)置完成的所述配置對象。
具體地,設(shè)置模塊調(diào)用第一設(shè)置函數(shù)對所述配置對象進(jìn)行第一項(xiàng)配置信息的設(shè)置,通過調(diào)用第一設(shè)置函數(shù),在第一設(shè)置函數(shù)的內(nèi)部會通過參數(shù)傳遞的形式將具體的配置信息寫入配置對象中,完成設(shè)置邏輯,在每次設(shè)置完成后通過return語句返回第一次設(shè)置好的配置對象。設(shè)置模塊直接繼續(xù)調(diào)用第二設(shè)置函數(shù)對所述第一次設(shè)置好的配置對象進(jìn)行設(shè)置,并返回第二次設(shè)置好的配置對象。然后繼續(xù)調(diào)用第三設(shè)置函數(shù)對所述第二次設(shè)置好的配置對象進(jìn)行設(shè)置,……,調(diào)用第k設(shè)置函數(shù)對第k-1次設(shè)置好的所述配置對象進(jìn)行第k項(xiàng)配置信息的設(shè)置,……,調(diào)用第n設(shè)置函數(shù)對第n-1次設(shè)置好的所述配置對象進(jìn)行第n項(xiàng)配置信息的設(shè)置,并返回第n次設(shè)置完成的配置對象。n為配置信息的總項(xiàng)數(shù),根據(jù)實(shí)際需要進(jìn)行多少項(xiàng)配置信息的設(shè)置而定。下一項(xiàng)配置信息的設(shè)置都是基于前一次配置完成的配置對象,就像環(huán)形一樣的一直設(shè)置下去直到所有配置信息設(shè)置完成。最后,設(shè)置模塊通過調(diào)用結(jié)束函數(shù)將最終設(shè)置好的配置對象進(jìn)行返回。所述自定義的結(jié)束函數(shù)內(nèi)部僅僅是將最終設(shè)置好的配置對象進(jìn)行返回,而不做其他任何處理。
本發(fā)明實(shí)施例提供的一種配置信息的設(shè)置裝置,設(shè)置模塊通過采用鏈?zhǔn)秸{(diào)用的方式進(jìn)行配置信息的設(shè)置,可以直接在原先配置的基礎(chǔ)上進(jìn)行下一項(xiàng)配置的設(shè)置,極大的提高了設(shè)置配置的效率,方便后期對其進(jìn)行維護(hù)和升級。
本發(fā)明上述各實(shí)施例提供的配置文件的設(shè)置方法及裝置,通過采用單例模式創(chuàng)建配置對象,使得全局有且僅有一個(gè)配置類對象存在,外部調(diào)用者可以很方便地找到這個(gè)配置類對象并獲取相關(guān)的配置信息,使得配置過程很方便管理,并且采用鏈?zhǔn)秸{(diào)用設(shè)置函數(shù)對配置對象進(jìn)行配置信息的設(shè)置,配置過程簡單、代碼清晰且后期維護(hù)方便,能夠提高開發(fā)人員配置的效率,降低開發(fā)成本。
最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。