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

J’ai obtenu le dernier jalon de Grails 2.0 et je vois un avertissement de dépréciation pour la classe ConfigurationHolder :

 org.codehaus.groovy.grails.commons.ConfigurationHolder 

Le message de dépréciation dit simplement “Utiliser l’dependency injection à la place”, ce qui n’est pas très utile pour moi. Je comprends l’dependency injections, mais comment puis-je câbler un bean avec la configuration Grails appropriée pour pouvoir y accéder à l’exécution? J’ai besoin d’accéder à la configuration à partir d’endroits autres que mes contrôleurs et balises (tels que BootStrap ).

  • Si vous en avez besoin dans un artefact qui prend en charge l’dependency injections, injectez simplement des grailsApplication

     class MyController { def grailsApplication def myAction = { def bar = grailsApplication.config.my.property } } 
  • Si vous en avez besoin dans un bean, par exemple, src/groovy ou src/java , connectez-le en utilisant 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, il est probablement plus facile de passer l’object de configuration à la classe qui en a besoin ou de transmettre les propriétés spécifiques requirejses.

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

Mettre à jour:

Burt Beckwith a récemment écrit quelques articles sur ce sujet. L’un traite de l’utilisation de getDomainClass() à l’intérieur des classes de domaine, tandis que l’autre offre la possibilité de créer votre propre classe de support (si aucune des solutions ci-dessus ne convient).

Une alternative à grailsApplication est la classe Holders ,

 import grails.util.Holders def config = Holders.config 

Vous obtenez directement la configuration des Holders, aucune injection nécessaire, ce qui est pratique pour les classes utilitaires, etc.

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 = { } } 

Une autre méthode non obsolète pour obtenir la configuration est la suivante:

  ApplicationContext context = ServletContextHolder.servletContext. getAtsortingbute(GrailsApplicationAtsortingbutes.APPLICATION_CONTEXT) as ApplicationContext ConfigObject config = context.getBean(GrailsApplication).config 

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

Vous pouvez accéder à la configuration des grails

  1. En contrôleur

     class DemoController { def grailsApplication def demoAction = { def obj = grailsApplication.config.propertyInConfig } } 
  2. Dans les services:

     class DemoService { def grailsApplication def demoMethod = { def obj = grailsApplication.config.propertyInConfig } } 
  3. En taglib:

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

Vous pouvez appeler cette méthode de taglib en vue sous la forme

  1. En vue :

       Demo  ${grailsApplication.config.propertyInConfig}   

Pour accéder à la classe de domaine, procédez comme suit:

 import grails.util.Holders // more code static void foo() { def configOption = Holders.config.myProperty }