如何在groovy中定义自定义函数,使用JSR-223 API与java集成

bf1o4zei  于 2023-03-07  发布在  Java
关注(0)|答案(1)|浏览(178)

如果我使用GroovyShell,它就像这样:

CompilerConfiguration cfg = new CompilerConfiguration()
cfg.setScriptBaseClass(CustomScript.class.getName())

GroovyShell shell = new GroovyShell(cfg)

其中“CustomScript”是包含自定义函数的自定义类。
当我使用JSR-223 API来集成Groovy和Java时,我该如何做到这一点?
我没有在JSR-223 API或GroovyScriptEngineImpl中找到任何接口。

sh7euo9m

sh7euo9m1#

在GroovyScriptEngine上,您只需执行以下操作:

CompilerConfiguration cfg = new CompilerConfiguration()
cfg.setScriptBaseClass(CustomScript.class.getName())

GroovyScriptEngine engine = new GroovyScriptEngine(...)
engine.setConfig( cfg )

JSR-223实际上并没有与之等效的功能。您可以将Java对象示例绑定到一个全局变量中,以便将这些API公开给您想要的任何脚本语言。
脚本引擎引擎=...引擎.put(“系统”,新系统支持())
但在你的剧本里会是这样的:

system.someApiMethod()

但是你不能透明地子类化CustomScript来“全局地”公开方法。不是所有的脚本语言都像Java那样只从对象的Angular 工作。以Javascript为例。在不支持典型OO的JS中子类化Java对象将如何工作呢?JSR-223在很大程度上是从Javascript的Angular 考虑的。
出于实用目的,您可能希望评估JSR-233 API兼容性是否是必须的,并适应它,或者干脆放弃诱饵,使用特定的脚本引擎(如Groovy)。但我可能会选择DSL路线,而不是将对象子类化,因为我认为它更灵活,表达能力更强。

相关问题