-->

难道常规提供包括机制?(Does groovy provide an include mechani

2019-08-01 01:04发布

我们正在寻找一个包括机制的Groovy脚本有交叉,关注空间。

在我的例子,我们有,Web服务端点的Groovy脚本,并希望登录到我们的Web服务协议。 对于我们使用隐式对象(从我们的框架越来越)创建日志声明。

但是,这是如果我们在每一个Web服务端点代码这个样板代码。

我们正在寻找类似的东西包括()在PHP,包括其他Groovy脚本,是否有任何想法如何做到这一点?

Answer 1:

既然你已经提到的“跨部门,关注”我说,你需要拦截您的Web服务调用AOP风格(不是包括机构)。

Grails是完全集成的Spring框架 ,所以这使得对于利用Spring AOP的功能一个不错的选择。 看看从Grails的本章官方指导价为: http://grails.org/doc/latest/guide/14.%20Grails%20and%20Spring.html和搜索词AOP。

也许有一个纯粹的常规方法做AOP的,但我会用Grails和春去。



Answer 2:

Groovy的对待自己的文件作为对象(认为它是自动包装的)。 它使得可以作为类的Java类路径中的所有.groovy文件。 所以,如果你有文件util.groovy,包含这样的事情里面:

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

为了从你只写另一个文件调用它:

println util.AuxMethod()

而已。 同样,只要确保你的util.groovy文件在类路径中。



Answer 3:

要调用脚本u.groovy从当前脚本,沿原来的参数传递给u.groovy,运行

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

很显然,你也可以发送任何你想要的字符串参数:

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


Answer 4:

看看评价(文件)功能:

 Object evaluate(File file) 

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



Answer 5:

我做了这方面的一些研究的领域特定语言我创建。 有三种可能性:

  1. 为继承父Groovy类创建的类。 把你的共享代码基类。

  2. 使用ScriptBaseClass看到http://groovy.codehaus.org/Embedding+Groovy 。 这是在其所有的脚本将创建一个类。

  3. 使用进口静态方法的能力。 需要注意的是,你可以做到这一点的Java容器(见里面http://mrhaki.blogspot.com/2011/06/groovy-goodness-add-imports.html )。

所有这些工作的伟大。 我的选择是ScriptBaseClass。 这效果最好,如果通用代码就是Groovy(该ScriptBaseClass 必须是一个常规类,它不可能是一个Java类。)

当然,所有这些项目,你仍然需要实际调用常用的方法在你的Groovy代码。 例如:

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

那不是太可怕了,我不认为。 当然,关于与加入某种#包括预处理器语句。

最后,所有这一切都假定您可以访问哪些呼唤你的Groovy代码的Java程序。 如果不是的话,你仍然可以使用静态导入。 它的代码只是一个额外的行。

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


Answer 6:

我发现这个通讯录有帮助。 http://groovy.329449.n5.nabble.com/Groovy-scripts-Reusing-declared-methods-in-other-scripts-How-Include-td5703723.html



文章来源: Does groovy provide an include mechanism?