我在groovy中创建了一个配置类,如下所示
class EnvironmentConfig {
String configFilePath
Config envConfig
public EnvironmentConfig (String configFilePath) {
this.configFilePath = configFilePath
envConfig = ConfigFactory.load(configFilePath)
}
def propertyMissing(String name) {
envConfig.getString(name)
}
}这个想法是,当我的应用程序启动时,这个类应该只实例化一次,并且每个其他的类都应该能够访问这个类。现在我已经写了一个非常小的主类来检查一些东西。
public static void main(String[] args) {
EnvironmentConfig envConfig = new EnvironmentConfig(envConf)
println "${envConfig.TESS_WORKDIR}"
}这很好用,但是如果我像这样写的话
public static void main(String[] args) {
EnvironmentConfig envConfig = new EnvironmentConfig(envConf)
println "${EnvironmentConfig.TESS_WORKDIR}"
}它不起作用,我希望任何类都应该能够只使用EnvironmentConfig.TESS_WORKDIR,并且调用应该被路由到missingProperty方法,在那里它应该返回一些值。
发布于 2015-07-16 22:42:55
看起来下面的代码完成了这项工作,并没有对其进行广泛的测试:
class EnvironmentConfig {
Map m
EnvironmentConfig (Map m) {
this.m = m
this.class.metaClass.static.propertyMissing = { name ->
this.propertyMissing(name)
}
}
def propertyMissing(String name) {
this.@m[name]
}
}
EnvironmentConfig envConfig = new EnvironmentConfig([TESS_WORKDIR:1])
assert envConfig.TESS_WORKDIR == 1
assert EnvironmentConfig.TESS_WORKDIR == 1
envConfig = new EnvironmentConfig([:])
assert envConfig.TESS_WORKDIR == null
assert EnvironmentConfig.TESS_WORKDIR == nullhttps://stackoverflow.com/questions/31456881
复制相似问题