7
votes

Groovy fournit-il un mécanisme d'inclure?

Nous recherchons un mécanisme d'inclusion pour les scripts groovy pour avoir de la place pour les préoccupations transversales.

Dans mon exemple, nous avons des points d'extrémité de service Web comme scripts Groovy et souhaitez vous connecter à notre protocole de service Web. Pour cela, nous utilisons notre objet implicite (à partir de notre cadre) pour créer la déclaration de journalisation.

Mais c'est le code de la chaudière si nous codroyons cela dans chaque point final de service Web.

Nous recherchons quelque chose comme inclure () en PHP, qui inclut d'autres scripts groovy, y a-t-il des idées comment faire cela?


0 commentaires

7 Réponses :


1
votes

Regardez la fonction Evaluate (Fichier):

 Object evaluate(File file) 


2 commentaires

Inutile si vous n'expliquez pas comment faire ou obtenir un objet de script, car cette classe est abstraite.


Généralement, le code qui l'appellerait est compilé à une instance d'un script anonyme script .



1
votes

Puisque vous avez déjà mentionné "préoccupations croisées", je dirais que vous devez intercepter vos appels WebService AOP style (pas un mécanisme inclus).

grails est complètement intégré à Cadre de ressort < / a>, cela fait donc une bonne option pour exploiter les fonctionnalités de Spring AOP. Jetez un coup d'œil à ce chapitre de Grails Guide officiel: http://grails.org/doc/latest/Guide /14.%20grails%20and%20Spring.html et recherche de mot AOP.

Peut-être qu'il y a un purement groovy de faire un AOP, mais je "D aller avec greva et printemps.


0 commentaires

10
votes

Groovy traite ses fichiers comme des objets (réfléchissez-y à partir de l'emballage automatique). Et il fait tous les fichiers .Groovy au sein de la classe Java ClassPath disponible en classes. Donc, si vous avez le fichier util.groovy, qui contient quelque chose comme celui-ci à l'intérieur:

println util.AuxMethod()


3 commentaires

Je soupçonne que cela ne fonctionne que si vos scripts groovy sont des classes orientées objet. Avec des scripts fonctionnels réguliers, cela ne fonctionne probablement pas?


L'exemple fonctionne uniquement, au moins de Windows, si le script UTIL.GROOVY est renommé que la capitalisation utilil.Groovy et la référence correspondante en correspondant à "println util.auxmethod ()"


Suivi de mon commentaire précédent. Cela s'applique également à UNIX. Ne fonctionne pas tant que je renommerai "util" à "util". En outre, la plupart des développeurs Java + Groovy écriraient la déclaration de méthode pour se conformer aux conventions Java: statique def Auxmethod. C'est à dire. "statique" avant le nom de type et toutes les méthodes commencent par des minuscules (voir par exemple des tonnes de méthodes statiques dans Java.Util.Collections).



2
votes

Pour appeler script u.groovy code> à partir du script actuel, passez le long des arguments d'origine à l'U.Groovy, exécutez

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


0 commentaires

1
votes

J'ai fait des recherches sur cette question pour une langue spécifique à un domaine que je créait. Il y a trois possibilités:

  1. Créez vos cours comme héritage d'une classe de parent groovy. Mettez votre code partagé dans la classe de base. P> LI>

  2. Utilisez le scriptbaseclasse Voir http://groovy.codehaus.org/embedding+groovy a>. Ceci est une classe sur laquelle tous vos scripts seront créés. P> LI>

  3. Utilisez la capacité des méthodes statiques de l'importation. Notez que vous pouvez le faire dans le conteneur Java (voir http: / /mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html ). P> LI> ol>

    Tous ces travaux générés. Ma préférence est la scriptbaseclass. Cela fonctionne mieux si le code commun est groovy (le scriptbaseclass doit être une classe groovy. Il ne peut pas être une classe Java.) P>

    Bien sûr, avec tous ces articles, avec tous ces articles, avec tous ces articles, Vous aurez toujours besoin d'appeler la méthode commune dans votre code Groovy. Par exemple: P>

    import static com.mycompany.mycode.doCommonStuff
    doCommonStuf()
    .
    . do the rest of it here
    .
    


0 commentaires


0
votes

J'ai créé un préprocesseur pour mes scripts. Il recherche un modèle spécifique Inclure , voici un exemple: xxx

et comment l'utiliser: xxx < / p>


0 commentaires