[英]Jenkins Shared Library Immutable Singleton
我的詹金斯共享庫中有一個Singleton模式類:
public class Configuration {
private static final INSTANCE = new Configuration()
static getInstance() { return INSTANCE }
private Configuration() {
}
def initialize(env, params) {
Foo = params.FOO;
}
public String Foo = ''
}
稍后,我可以使用其他類似的方法從其他地方調用此方法:
Configuration.instance.initialize(env, params);
config = Configuration.instance;
println 'FOO: ' + config.Foo
理想情況下,我希望受益於Singleton模式,但我不希望某些字段被消費者覆蓋。
第一次嘗試:
乍一想,我認為這會起作用:
public class Configuration {
private static final INSTANCE = new Configuration()
static getInstance() { return INSTANCE }
private Configuration() {
}
def initialize(env, params) {
INSTANCE.@Foo = params.FOO;
}
public final String Foo = ''
}
錯誤:
groovy.lang.GroovyRuntimeException:無法設置屬性“ Foo”,因為后備字段是最終字段。
第二次嘗試:
在第二個想法上,我認為在構造函數中進行初始化是可行的,但是我似乎無法訪問params
和env
,除非它們是通過initialize()
方法從vars函數傳入的。
如何使此Singleton類不可變,或者其字段為只讀?
我認為您可以:
this
在實例吧, 相對於this
(你可以調用內部script
),你可以參考script.params
, script.env
等,我的意思是你不必使用initialize
,您可以在c'tor中做所有您想做的事情。 但是,請稍候:
為什么CI / CD代碼需要具有Singleton? 您正在將其數據作為參數傳遞[因此它並不是真正的不可變實體:)]
也許您可以根據您的參數“簡單地”創建一個不變的地圖。
配置為單例感覺就像您可以將配置管理委派給...配置管理服務(領事,etcd或其他)。
請詳細說明,這很好奇!
您也稱“消費者”。 這些圖書館的消費者嗎? 還是工作的人?
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.