Question

Nous recherchons un mécanisme pour inclure des scripts Groovy d'avoir un espace pour TRANSERSALES-préoccupations.

Dans mon exemple, nous avons, points de terminaison de service Web que les scripts Groovy et que vous souhaitez vous connecter à notre protocole de service Web. pour que nous utilisons notre objet implicite (obtenir de notre cadre) pour créer la déclaration d'enregistrement.

Mais ce code est boilerplate si on code ce dans chaque noeud final de service Web.

Nous recherchons quelque chose comme include () en php, qui inclut d'autres scripts Groovy, yat-il des idées comment faire?

Était-ce utile?

La solution

Puisque vous avez déjà mentionné « transversales-préoccupations » Je dirais que vous avez besoin d'intercepter vos appels WebService Style AOP (pas un mécanisme inclus).

Grails est complètement intégré à framework Spring , donc ceci en fait une bonne option pour exploiter les caractéristiques Spring AOP. Jetez un oeil à ce chapitre de Grails guide officiel: http://grails.org/doc/latest/guide /14.%20Grails%20and%20Spring.html et rechercher AOP mot.

Peut-être il y a un manière purement groovy de faire AOP, mais je « d aller avec Grails et au printemps.

Autres conseils

Groovy traite ses fichiers sous forme d'objets (considérer comme de l'emballage automatique). Et il fait tous les fichiers .groovy dans le classpath Java disponible en cours. Donc, si vous avez le fichier util.groovy, qui contient quelque chose comme ceci à l'intérieur:

def static AuxMethod() {
    return "Hello World"
}

Pour appeler à partir d'un autre fichier que vous écrivez simplement:

println util.AuxMethod()

Voilà. Encore une fois, assurez-vous que votre fichier util.groovy est dans le classpath.

Pour appeler u.groovy script à partir du script en cours, en passant le long des arguments originaux à l'u.groovy, exécutez

run(new File('u.groovy'), args)

De toute évidence, vous pouvez également envoyer des arguments de chaîne que vous voulez:

run(new File('u.groovy'),
        ['one', new File('two.text').absolutePath] as String[])

Regardez la fonction evaluate (Fichier):

 Object evaluate(File file) 

http://groovy.codehaus.org/api/groovy/lang /Script.html

Je l'ai fait des recherches sur ce pour une langue spécifique du domaine que je créais. Il y a trois possibilités:

  1. Créez vos classes comme héritant d'une classe groovy mère. Mettez votre code partagé dans la classe de base.

  2. Utilisez les ScriptBaseClass voir http://groovy.codehaus.org/Embedding+Groovy. C'est une classe sur laquelle tous vos scripts seront créés.

  3. Utilisez la capacité des méthodes statiques d'importation. Notez que vous pouvez le faire à l'intérieur du conteneur java (voir http: / /mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html ).

Tous ces grand travail. Ma préférence est le ScriptBaseClass. Cela fonctionne mieux si le code est commun Groovy (le ScriptBaseClass doit une classe groovy. Il ne peut pas être une classe java.)

Bien sûr, avec tous ces éléments, vous aurez toujours besoin d'appeler réellement la méthode commune dans votre code groovy. Par exemple:

doCommonStuff();
.
. do the rest of it here
.

Ce n'est pas trop horrible, je ne pense pas. Certes, sur le même que l'ajout d'une sorte de déclaration #include pré-processeur.

Et enfin, tout cela suppose que vous avez accès au programme java qui appelle votre code Groovy. Si ce n'est pas le cas, vous pouvez toujours utiliser les importations statiques. Il est juste une ligne de code supplémentaire.

import static com.mycompany.mycode.doCommonStuff
doCommonStuf()
.
. do the rest of it here
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top