groovy 如何在Grails 2.0中访问Grails配置?

juzqafwq  于 2022-12-22  发布在  其他
关注(0)|答案(7)|浏览(142)

我已经获得了最新的Grails 2.0里程碑,并且看到了ConfigurationHolder类的弃用警告:

org.codehaus.groovy.grails.commons.ConfigurationHolder

这个不赞成的消息只是简单地说“改用依赖注入”,这对我来说没有多大帮助。我理解依赖注入,但是我如何使用正确的Grails配置来连接bean,以便在运行时访问它呢?我需要从控制器和标记之外的位置访问配置(例如BootStrap)。

dvtswwa3

dvtswwa31#

  • 如果需要在支持依赖注入的工件中使用它,只需注入grailsApplication
class MyController {
    def grailsApplication

    def myAction = {
        def bar = grailsApplication.config.my.property
    }
}
  • 如果您需要在src/groovysrc/java中的bean中使用它,请使用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'
    }
}
  • 在其他任何地方,最简单的方法可能是将配置对象传递给需要它的类,或者传递所需的特定属性。
// 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)
    }
}
    • 更新日期:**

Burt Beckwith最近在域类中写了几篇关于这个. One discusses usinggetDomainClass()的博客文章,而另一篇文章提供了creating your own holder class的选项(如果上面的解决方案都不合适的话)。

nlejzf6q

nlejzf6q2#

grailsApplication的一个替代方法是Holders类,

import grails.util.Holders

def config = Holders.config

您可以直接从Holders中获取配置,不需要注入,这对于实用程序类等来说是很好的。

p4tfgftt

p4tfgftt3#

您可以将“grailsApplication”注入到源文件中。下面是一个示例conf/Bootstrap.groovy

class BootStrap {

    def grailsApplication

    def init = { servletContext ->
        println grailsApplication.config
    }

    def destroy = {
    }
}
bvuwiixz

bvuwiixz4#

另一种不过时的获取配置的方法是:

ApplicationContext context = ServletContextHolder.servletContext.
        getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT) 
        as ApplicationContext
    ConfigObject config = context.getBean(GrailsApplication).config

这适用于没有可用的注入父对象的情况,例如servlet类或静态方法。

zrfyljdw

zrfyljdw5#

您可以访问grails配置
1.在控制器中

class DemoController {
    def grailsApplication

    def demoAction = {
        def obj = grailsApplication.config.propertyInConfig
    }
}

1.在服务方面:

class DemoService {
    def grailsApplication

    def demoMethod = {
        def obj = grailsApplication.config.propertyInConfig
    }
}

1.在标记库中:

class DemoTaglib {
    def grailsApplication

    static namespace = "cd"

    def demoMethod = {

        def obj = grailsApplication.config.propertyInConfig

        out << obj    
    }
}

您可以在view中调用taglib的此方法<cd:demoMethod/>
1.查看:

<html>
     <head><title>Demo</title></head>
 <body>
     ${grailsApplication.config.propertyInConfig}
 </body>

 </html>
d7v8vwbk

d7v8vwbk6#

要从域类访问,请执行以下操作:

import grails.util.Holders

// more code

static void foo() {
  def configOption = Holders.config.myProperty
}
72qzrwbm

72qzrwbm7#

import grails.util.Holders

and then you can access by 
def serverUrl = Holders.grailsApplication.config.getProperty('serverUrl')

相关问题