我们正在寻找一个包括机制的Groovy脚本有交叉,关注空间。
在我的例子,我们有,Web服务端点的Groovy脚本,并希望登录到我们的Web服务协议。 对于我们使用隐式对象(从我们的框架越来越)创建日志声明。
但是,这是如果我们在每一个Web服务端点代码这个样板代码。
我们正在寻找类似的东西包括()在PHP,包括其他Groovy脚本,是否有任何想法如何做到这一点?
我们正在寻找一个包括机制的Groovy脚本有交叉,关注空间。
在我的例子,我们有,Web服务端点的Groovy脚本,并希望登录到我们的Web服务协议。 对于我们使用隐式对象(从我们的框架越来越)创建日志声明。
但是,这是如果我们在每一个Web服务端点代码这个样板代码。
我们正在寻找类似的东西包括()在PHP,包括其他Groovy脚本,是否有任何想法如何做到这一点?
既然你已经提到的“跨部门,关注”我说,你需要拦截您的Web服务调用AOP风格(不是包括机构)。
Grails是完全集成的Spring框架 ,所以这使得对于利用Spring AOP的功能一个不错的选择。 看看从Grails的本章官方指导价为: http://grails.org/doc/latest/guide/14.%20Grails%20and%20Spring.html和搜索词AOP。
也许有一个纯粹的常规方法做AOP的,但我会用Grails和春去。
Groovy的对待自己的文件作为对象(认为它是自动包装的)。 它使得可以作为类的Java类路径中的所有.groovy文件。 所以,如果你有文件util.groovy,包含这样的事情里面:
def static AuxMethod() {
return "Hello World"
}
为了从你只写另一个文件调用它:
println util.AuxMethod()
而已。 同样,只要确保你的util.groovy文件在类路径中。
要调用脚本u.groovy
从当前脚本,沿原来的参数传递给u.groovy,运行
run(new File('u.groovy'), args)
很显然,你也可以发送任何你想要的字符串参数:
run(new File('u.groovy'),
['one', new File('two.text').absolutePath] as String[])
看看评价(文件)功能:
Object evaluate(File file)
http://groovy.codehaus.org/api/groovy/lang/Script.html
我做了这方面的一些研究的领域特定语言我创建。 有三种可能性:
为继承父Groovy类创建的类。 把你的共享代码基类。
使用ScriptBaseClass看到http://groovy.codehaus.org/Embedding+Groovy 。 这是在其所有的脚本将创建一个类。
使用进口静态方法的能力。 需要注意的是,你可以做到这一点的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
.
我发现这个通讯录有帮助。 http://groovy.329449.n5.nabble.com/Groovy-scripts-Reusing-declared-methods-in-other-scripts-How-Include-td5703723.html