Frage

Wir suchen nach einem Include-Mechanismus für groovy Skripte Raum für Querschnitts-Bedenken zu haben.

In meinem Beispiel haben wir, Web-Service-Endpunkte als groovy Skripte und wollen unser Web-Service-Protokoll protokollieren. für die wir verwenden unser implizites Objekt (von unserem Rahmen immer) die logging-Anweisung zu erstellen.

Das ist aber Standardcode, wenn wir diesen Code in jedem Web-Service-Endpunkt.

Wir suchen so etwas wie include () in PHP, die andere groovy Skripte enthält, gibt es irgendwelche Ideen, wie dies zu tun?

War es hilfreich?

Lösung

Da Sie bereits erwähnten „Querschnitts-Bedenken:“ Ich würde sagen, dass Sie benötigen, um Ihre Anrufe Webservice abfangen AOP Stil (nicht enthalten Mechanismus).

Grails ist vollständig integriert mit Spring-Framework , so macht dies für eine gute Option für den Frühling AOP Funktionen zu nutzen. Werfen Sie einen Blick auf dieses Kapitel von Grails offiziellen Guide: http://grails.org/doc/latest/guide /14.%20Grails%20and%20Spring.html und für Wort AOP suchen.

Vielleicht ist es eine rein groovy Art und Weise AOP zu tun, aber ich Würd mit Grails und Frühjahr gehen.

Andere Tipps

Groovy behandelt seine Dateien als Objekte (denken Sie daran, wie der automatischen Verpackung). Und es macht alle .groovy Dateien innerhalb des Java-Classpath als Klassen. Also, wenn Sie die Datei util.groovy haben, das enthält so etwas wie dieses im Innern:

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

nennt es aus einer anderen Datei, die Sie gerade schreiben:

println util.AuxMethod()

Das ist es. Auch hier, so stellen Sie sicher, dass Ihre util.groovy Datei im Classpath ist.

Skript u.groovy aus dem aktuellen Skript aufzurufen, entlang der ursprünglichen Argumente an die u.groovy vorbei, führen

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

Natürlich können Sie auch alle String Argumente senden, die Sie wollen:

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

Schauen Sie sich die Evaluierung (File) Funktion:

 Object evaluate(File file) 

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

Ich habe auf diese einige der Forschung für eine Domain Specific Language Ich war zu schaffen. Es gibt drei Möglichkeiten:

  1. Erstellen Sie Ihre Klassen als Eltern groovy Klasse erben. Setzen Sie Ihren gemeinsamen Code in der Basisklasse.

  2. Mit dem ScriptBaseClass finden Sie unter http://groovy.codehaus.org/Embedding+Groovy. Dies ist eine Klasse, auf dem alle Ihre Skripte erstellt werden.

  3. Mit der Import statischen Methoden Fähigkeit. Beachten Sie, dass diese innerhalb des Java-Container tun können (siehe http: / /mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html ).

All diese Arbeit groß. Meine Präferenz ist die ScriptBaseClass. Dies funktioniert am besten, wenn der gemeinsame Code ist Groovy (die ScriptBaseClass muss groovigem Klasse sein. Es kann nicht eine Java-Klasse sein.)

Natürlich mit all dieser Elemente, werden Sie noch brauchen, um tatsächlich die gängige Methode in Ihrem groovy Code aufrufen. Zum Beispiel:

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

Das ist nicht zu schrecklich, ich glaube nicht. Sicherlich etwa das gleiche wie das Hinzufügen irgendeine Art von # include Pre-Prozessor-Anweisung.

Und schließlich, all dies setzt voraus, dass Sie Zugriff auf das Java-Programm, das Ihren Groovy-Code ruft. Wenn das nicht der Fall ist, können Sie immer noch die statischen Importe verwenden. Es ist nur eine zusätzliche Zeile Code.

import static com.mycompany.mycode.doCommonStuff
doCommonStuf()
.
. do the rest of it here
.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top