web-dev-qa-db-ja.com

Grails 2.0でGrails構成にアクセスする方法は?

最新のGrails 2.0マイルストーンを取得しましたが、ConfigurationHolderクラスの非推奨警告が表示されています。

org.codehaus.groovy.grails.commons.ConfigurationHolder

非推奨のメッセージには、「依存関係の注入を代わりに使用する」というメッセージが表示されるだけで、あまり役に立ちません。依存性注入は理解できますが、実行時にアクセスできるように適切なGrails構成でBeanを接続するにはどうすればよいですか?コントローラーとタグ以外の場所(BootStrapなど)から構成にアクセスする必要があります。

63
Polaris878
  • 依存性注入をサポートするアーティファクトで必要な場合は、単にgrailsApplicationを注入します

    _class MyController {
        def grailsApplication
    
        def myAction = {
            def bar = grailsApplication.config.my.property
        }
    }
    _
  • たとえば、_src/groovy_または_src/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 は最近、これに関するブログ記事をいくつか書いています。 1つはドメインクラス内からのgetDomainClass()の使用について説明し、もう1つは 独自のホルダークラスの作成オプションを提供します (上記のソリューションがどれも適切でない場合)。

104
Rob Hruska

GrailsApplicationの代わりに Holders クラスがあります。

import grails.util.Holders

def config = Holders.config

ホルダーから直接設定を取得し、インジェクションは不要です。これはユーティリティクラスなどに適しています。

57
James McMahon

「grailsApplication」をソースファイルに挿入できます。サンプルconf/Bootstrap.groovyはこちら

class BootStrap {

    def grailsApplication

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

    def destroy = {
    }
}
18
Mengu

構成を取得するもう1つの非推奨の方法は次のとおりです。

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

これは、サーブレットクラスや静的メソッドなど、使用可能な挿入された親がない状況で機能します。

10
Ingo Kegel

Grails構成にアクセスできます

  1. コントローラー内

    class DemoController {
        def grailsApplication
    
        def demoAction = {
            def obj = grailsApplication.config.propertyInConfig
        }
    }
    
  2. サービス内:

    class DemoService {
        def grailsApplication
    
        def demoMethod = {
            def obj = grailsApplication.config.propertyInConfig
        }
    }
    
  3. Taglibで:

    class DemoTaglib {
        def grailsApplication
    
        static namespace = "cd"
    
        def demoMethod = {
    
            def obj = grailsApplication.config.propertyInConfig
    
            out << obj    
        }
    }
    

<cd:demoMethod/>としてビューでtaglibのこのメソッドを呼び出すことができます

  1. ビューで :

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

ドメインクラスからアクセスするには:

import grails.util.Holders

// more code

static void foo() {
  def configOption = Holders.config.myProperty
}
0
cristian.d