ScriptEngineManager类,这个类是jdk8新增的:
package com.example.encryption;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
@SpringBootTest
class EncryptionApplicationTests {
@Test
void contextLoads() throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine javaScript = manager.getEngineByName("JavaScript");
javaScript.eval("print('hello word!!')");
}
@Test
public void obj() throws ScriptException, NoSuchMethodException {
ScriptEngineManager manager = new ScriptEngineManager();
//注意方法中的javaScript要写成JavaScript
ScriptEngine engine = manager.getEngineByName("javaScript");
StringBuffer script = new StringBuffer();
script.append("var obj = new Object();");
script.append("obj.hello = function(name) {print('hello, ' + name);}");
engine.eval(script.toString());
Invocable inv = (Invocable) engine;
Object obj = engine.get("obj");
inv.invokeMethod(obj, "hello", "Script Method !!");
}
/**
* 脚本变量
* @throws Exception
* */
@Test
public void scriptVar() throws Exception{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(new java.io.FileReader("src/main/java/com/example/encryption/script.js"));
}
}
从 JDK 6 开始,Java 就捆绑了基于 Mozilla 的 Rhino 的 JavaScript 引擎,该特性允许开发者将 JavaScript 代码嵌入到 Java 中,甚至从嵌入的 JavaScript 中调用 Java 。随着 JDK 8 的发布,Nashorn 取代 Rhino 成为 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持 ECMAScript 5.1 规范以及一些扩展,在发布之初被视为真正地融合了 Java 和 JavaScript 之力。因为相较于 Rhino ,它有着 2-10 倍的性能提升。
这里我们需要将Es6代码转化位Es5才能更好的在Java中使用
- cnpm/npm init -y // -y是指表示全部默认,不需要一个一个敲回车
- cnpm install -g babel-cli
- cnpm install --save -dev babel-cli babel-preset-latest
- cnpm install -g babel-preset-latest
- 在项目根目录下新建.babelrc文件 ,输入如下代码
{
"presets":["latest"]
} // 表示默认转码所有年份的js
- babel 1-hello.js --out-file 2-hello.js
babel src(要转换的es6文件目录) --out-dir dist(目标文件夹目录)