是否可以通过编程方式构建grails配置属性键?

Chr*_*s.D 2 grails groovy

使用时访问Config.groovy属性时 grailsApplication.config.myapp.something

是否有可能以某种方式以编程方式构建属性键?例如grailsApplication.config.myapp. + somethingVar.toString()

Ian*_*rts 8

Groovy允许您使用GString表达式进行属性访问,所以

grailsApplication.config.myapp."${somethingVar}"
Run Code Online (Sandbox Code Playgroud)

只要somethingVar不包含任何点,你就会做你想做的事.如果你有一个包含整个配置键的变量,包括点,那么你可以使用flatConfig:

def key = "myapp.something"
def value = grailsApplication.flatConfig."${key}"
Run Code Online (Sandbox Code Playgroud)

或者如果变量是"路径"的一部分而不是整体:

def key = "some.thing"
def value = grailsApplication.flatConfig."myapp.${key}" // gives myapp.some.thing
Run Code Online (Sandbox Code Playgroud)

或者你可以flatConfig通过使用技巧来避免inject

def key = "some.thing"
def value = key.split(/\./).inject(grailsApplication.config.myapp) { co, part ->
  co."${part}"
}
Run Code Online (Sandbox Code Playgroud)

inject方法为我们迭代的数组中的每个项调用一次闭包,每次传入最后一次迭代返回的值(我称之为coa ConfigObject)和此迭代的值(part).总体结果inject是最后一次迭代返回的值.