Pol*_*878 63 grails groovy grails-2.0
我已经获得了最新的Grails 2.0里程碑,我看到该ConfigurationHolder课程的弃用警告:
org.codehaus.groovy.grails.commons.ConfigurationHolder
Run Code Online (Sandbox Code Playgroud)
弃用消息只是简单地说"使用依赖注入",这对我没有多大帮助.我理解依赖注入,但是如何使用正确的Grails配置连接bean,以便我可以在运行时访问它?我需要从我的控制器和标签以外的地方访问配置(例如BootStrap).
Rob*_*ska 104
如果你需要在支持依赖注入的工件中,只需注入 grailsApplication
class MyController {
def grailsApplication
def myAction = {
def bar = grailsApplication.config.my.property
}
}
Run Code Online (Sandbox Code Playgroud)如果您需要在bean中使用,src/groovy或者使用src/java,请将其连接起来conf/spring/resources.groovy
// src/groovy/com/example/MyBean.groovy
class MyBean {
def grailsApplication
def foo() {
def bar = grailsApplication.config.my.property
}
}
// resources.groovy
beans = {
myBean(com.example.MyBean) {
grailsApplication = ref('grailsApplication')
// or use 'autowire'
}
}
Run Code Online (Sandbox Code Playgroud)在其他任何地方,最简单的方法是将配置对象传递给需要它的类,或者传递所需的特定属性.
// src/groovy/com/example/NotABean.groovy
class NotABean {
def foo(def bar) {
...
}
}
// called from a DI-supporting artifact
class MyController {
def grailsApplication
def myAction = {
def f = new NotABean()
f.foo(grailsApplication.config.my.property)
}
}
Run Code Online (Sandbox Code Playgroud)更新:
Burt Beckwith最近写了几篇博客文章.一个讨论 getDomainClass()在域类中使用,而另一个提供创建自己的持有者类的选项(如果上述解决方案都不合适).
Jam*_*hon 57
grailsApplication的替代方法是Holders类,
import grails.util.Holders
def config = Holders.config
Run Code Online (Sandbox Code Playgroud)
你可以直接从Holders获得配置,不需要注入,这对于实用程序类等很有用.
小智 18
您可以将"grailsApplication"注入源文件.这是一个示例conf/Bootstrap.groovy
class BootStrap {
def grailsApplication
def init = { servletContext ->
println grailsApplication.config
}
def destroy = {
}
}
Run Code Online (Sandbox Code Playgroud)
Ing*_*gel 10
获取配置的另一种不推荐的方法是:
ApplicationContext context = ServletContextHolder.servletContext.
getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
as ApplicationContext
ConfigObject config = context.getBean(GrailsApplication).config
Run Code Online (Sandbox Code Playgroud)
这适用于没有注入父项的情况,例如servlet类或静态方法.