返回介绍

3 JSR 223 javax.script API

发布于 2025-01-04 00:44:54 字数 1526 浏览 0 评论 0 收藏 0

JSR-223 是 Java 中标准的脚本框架调用 API。从 Java 6 开始引入进来,主要目用来提供一种常用框架,以便从 Java 中调用多种语言。由于 Groovy 自身已经提供了更丰富的集成机制,所以如果不想在同一应用中使用多种语言,那么建议使用 Groovy 的集成机制,而不是功能受限的 JSR-223 API。

下面展示的是如何初始化 JSR-223 引擎,从而在 Java 中与 Groovy 建立联系:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
...
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");

然后执行起 Groovy 脚本就方便多了:

Integer sum = (Integer) engine.eval("(1..10).sum()");
assertEquals(new Integer(55), sum);

也可以共享变量:

engine.put("first", "HELLO");
engine.put("second", "world");
String result = (String) engine.eval("first.toLowerCase() + ' ' + second.toUpperCase()");
assertEquals("hello WORLD", result);

下例展示了如何调用一个可调用的方法:

import javax.script.Invocable;
...
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("groovy");
String fact = "def factorial(n) { n == 1 ? 1 : n * factorial(n - 1) }";
engine.eval(fact);
Invocable inv = (Invocable) engine;
Object[] params = {5};
Object result = inv.invokeFunction("factorial", params);
assertEquals(new Integer(120), result);

引擎持有脚本函数的每一个默认的硬编码引用。要想改变这一点,可以为名为 ##jsr223.groovy.engine.keep.globals 的脚本上下文设置引擎级别的范围属性:用 phantom 字符串使用虚引用,用 weak 来使用弱引用,用 soft 来使用软引用,忽略大小写问题。任何其他的字符串都会导致使用硬编码引用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文