65 votes

Comment accéder à la configuration de Grails dans Grails 2.0?

J'ai obtenu le dernier Graal 2.0 étape, et je vois une dépréciation de l'avertissement en ConfigurationHolder classe:

org.codehaus.groovy.grails.commons.ConfigurationHolder

La dépréciation message dit simplement "Utiliser l'injection de dépendance au lieu de" qui n'est pas très utile pour moi. Je comprends l'injection de dépendance, mais comment puis-je associer un haricot avec le bon Grain de configuration afin que je puisse accéder à l'exécution? J'ai besoin d'accéder à la configuration à partir d'autres lieux que celui de mon Contrôleurs et les Balises (comme BootStrap).

105voto

Rob Hruska Points 39151
  • Si vous avez besoin d'elle dans un objet qui prend en charge l'injection de dépendance, simplement injecter grailsApplication

    class MyController {
        def grailsApplication
    
        def myAction = {
            def bar = grailsApplication.config.my.property
        }
    }
    
  • Si vous en avez besoin dans un haricot, disons, src/groovy ou src/java, d'un grillage à l'aide d' 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'
        }
    }
    
  • Partout ailleurs, c'est probablement plus facile de passer de l'objet de configuration de la classe qui en a besoin, ou de passer des propriétés spécifiques qui sont nécessaires.

    // 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)
        }
    }
    

Mise à jour:

Burt Beckwith a récemment écrit quelques posts sur ce. L'un traite de l'utilisation d' getDomainClass() de dans les classes du domaine, tandis que l'autre offre la possibilité de créer vos propres titulaire de la classe (si aucune des solutions ci-dessus sont appropriés).

59voto

James McMahon Points 14356

Une alternative à grailsApplication est la classe Holders ,

 import grails.util.Holders

def config = Holders.config
 

Vous obtenez la configuration directement à partir des supports, aucune injection nécessaire, ce qui est bien pour les classes utilitaires, etc.

18voto

Mengu Points 473

vous pouvez injecter "grailsApplication" dans votre fichier source. Voici un exemple de conf / Bootstrap.groovy

 class BootStrap {

    def grailsApplication

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

    def destroy = {
    }
}
 

10voto

Ingo Kegel Points 13858

Un autre moyen non obsolète d’obtenir la configuration est:

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

Cela fonctionne dans les situations où aucun parent injecté n'est disponible, telles que les classes de servlet ou les méthodes statiques.

4voto

Prabhat Kashyap Points 159

Vous pouvez accéder graal de configuration

  1. Dans Le Contrôleur :

    classe DemoController {

    def grailsApplication

    def demoAction = {

    def obj = grailsApplication.config.propertyInConfig
    

    } }

  2. Dans les services :

    classe DemoService { def grailsApplication

    def demoMethod = {
    
        def obj = grailsApplication.config.propertyInConfig
    
    }}
    
  3. Dans taglib :

    classe DemoTaglib {

    def grailsApplication

    statique namespace = "cd"

    def demoMethod = {

    def obj = grailsApplication.config.propertyInConfig
    
    out << obj    
    

    } }

    Vous pouvez appeler cette méthode de taglib dans la vue comme <cd:demoMethod/>

  4. En vue :

    <html>

    <head><title>Demo</title></head>

    <body>

    ${grailsApplication.config.propertyInConfig}

    </body>

    </html>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X