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?

Foi útil?

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) 

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

Eu fiz alguma pesquisa sobre isso por um Domain Specific Língua eu estava criando. Existem três possibilidades:

  1. Criar suas classes como herdar uma classe groovy do pai. Colocar o seu código compartilhado na classe base.

  2. Use o ScriptBaseClass ver http://groovy.codehaus.org/Embedding+Groovy. Esta é uma classe sobre a qual todos os seus scripts serão criados.

  3. 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
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top