2010-06-26 6 views
1

J'ai quelques classes groovy personnalisées dans mon projet Grails, et je voudrais injecter un logger et d'autres choses dans la classe, comme si ça fonctionnait dans un Classe de service ou classe de contrôleur. Le code de la classe "target" aurait ainsi un accès direct à la journalisation sans plus attendre. Comment serait-il possible d'écrire des scripts pour accrocher des événements dans le style "doWithDynamicMethods" dans un projet Grails (par opposition à un Grails Plugin) et ainsi améliorer vos propres classes?Accrocher un évènement Grails afin d'injecter des propriétés et des méthodes sans avoir de plugin.

Merci,

Sonne Christian Jensen

Répondre

0

Dans une application, vous devez généralement faire dans Grails-app/conf/BootStrap.groovy, par exemple

class BootStrap { 

    def init = { servletContext -> 
     Foo.metaClass.getLog = { -> ... } 
    } 
} 
+0

Salut, Il est vrai que vous pouvez le faire, mais je sais que cela peut être fait avec un script. D'une certaine manière, j'aime mieux l'idée quand l'amélioration est placée dans un script. Je l'ai vu une fois par rapport au plugin Tomcat comment ajouter des trucs au web.xml. Malheureusement, je ne peux pas trouver cet exemple pour le moment. –

+0

L'ajout d'éléments à web.xml est assez différent de l'ajout de méthodes de métaclasses aux classes. Il n'y a pas de support pour une phase 'doWithDynamicMethods' dans une application Grails classique comme dans un plugin, mais il n'y en a pas besoin. Un plugin a besoin d'un hook pour enregistrer les beans Spring et pour modifier web.xml car cela doit se produire au début du processus de démarrage, mais vous pouvez ajouter des méthodes de métaclasse à tout moment. BootStrap est donc un bon endroit. –

Questions connexes