O Groovy fornecer um mecanismo de incluir?
-
13-09-2019 - |
Pergunta
Estamos à procura de um include mecanismo para scripts groovy, ter espaço para transversais-preocupações.
No meu exemplo temos, terminais de serviços web como scripts Groovy e quer registrar para o nosso protocolo de serviço web. Para isso, usamos nosso objeto implícito (ficando do nosso quadro) para criar a declaração de registro.
Mas isso é código clichê se este código em cada extremidade do serviço Web.
Estamos à procura de algo como include () em php, que inclui outros scripts groovy, existem ideias como fazer isso?
Solução
Uma vez que você já mencionado “transversais-preocupações” Eu diria que você precisa para interceptar suas chamadas webservice estilo AOP (não um incluem mecanismo).
Grails é completamente integrado com o quadro Primavera , o que faz para uma boa opção para explorar Spring AOP apresenta. Dê uma olhada neste capítulo do grails guia oficial: http://grails.org/doc/latest/guide /14.%20Grails%20and%20Spring.html e pesquisar por palavra AOP.
Talvez haja uma puramente Groovy maneira de fazer AOP, mas eu 'd ir com Grails e primavera.
Outras dicas
Groovy trata seus arquivos como objetos (pense nisso como de embalagem automática). E faz todos os arquivos .groovy dentro do classpath java disponíveis como classes. Então, se você tem a util.groovy arquivo, que contém algo como isto dentro:
def static AuxMethod() {
return "Hello World"
}
Para chamá-lo de outro arquivo que você acabou de escrever:
println util.AuxMethod()
É isso. Novamente, apenas certifique-se de que o arquivo util.groovy está no classpath.
Para chamar roteiro u.groovy
do script atual, passando os argumentos originais para a u.groovy, run
run(new File('u.groovy'), args)
Obviamente, você também pode enviar quaisquer argumentos string que você quer:
run(new File('u.groovy'),
['one', new File('two.text').absolutePath] as String[])
Olhe para a função de avaliar (File):
Object evaluate(File file)
Eu fiz alguma pesquisa sobre isso por um Domain Specific Língua eu estava criando. Existem três possibilidades:
-
Criar suas classes como herdar uma classe groovy do pai. Colocar o seu código compartilhado na classe base.
-
Use o ScriptBaseClass ver http://groovy.codehaus.org/Embedding+Groovy. Esta é uma classe sobre a qual todos os seus scripts serão criados.
-
Use a capacidade de métodos de importação estáticos. Note que você pode fazer isso dentro do recipiente java (ver http: / /mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html ).
Todos estes grande trabalho. Minha preferência é o ScriptBaseClass. Isso funciona melhor se o código comum é Groovy (o ScriptBaseClass deve ser uma classe Groovy. Não pode ser uma classe java.)
Claro que, com todos esses itens, você ainda precisa realmente chamar o método comum em seu código Groovy. Por exemplo:
doCommonStuff();
.
. do the rest of it here
.
Isso não é muito horrível, eu não acho. Certamente sobre o mesmo que adicionar algum tipo de declaração pré-processador #include.
E, finalmente, tudo isto pressupõe que você tenha acesso ao programa java que está chamando o seu código Groovy. Se isso não for o caso, você ainda pode usar as importações estáticas. É apenas uma linha extra de código.
import static com.mycompany.mycode.doCommonStuff
doCommonStuf()
.
. do the rest of it here
.
Eu encontrei esta lista de correio útil. http : //groovy.329449.n5.nabble.com/Groovy-scripts-Reusing-declared-methods-in-other-scripts-How-Include-td5703723.html