源代码:https://gitee.com/AgentXiao/reflection
脚本引擎要点:
1、什么是脚本引擎
2、获得脚本引擎对象
3、执行脚本语句
4、执行js文件
一、脚本引擎
JAVA脚本引擎是从JDK6.0之后添加的新功能。
脚本引擎介绍:
- 使得 Java 应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在 Java 平台上调用各种脚本语言的目的。
- Java 脚本 API 是连通 Java 平台和脚本语言的桥梁。
- 可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率。
二、实现
/**
* @ClassName Demo01
* @Description 测试脚本引擎执行js代码
* @Author xwd
* @Date 2018/10/22 11:12
*/
public class Demo01 {
public static void main(String[] args) throws ScriptException, NoSuchMethodException, FileNotFoundException {
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,存储到引擎上下文
engine.put("msg","xwd is a good man");
String str = "var user = {name:'xwd',age:18,schools:['清华大学','华南农业大学']};";
str += "print(user.name);";
//执行脚本
engine.eval(str);
engine.eval("msg='lsm is beautiful!'");
System.out.println(engine.get("msg"));
//定义js函数
engine.eval("function add(a,b){var sum = a + b;return sum;}");
//取得调用接口
Invocable invocable = (Invocable) engine;
//执行js函数
Object o = invocable.invokeFunction("add", new Object[]{13, 22});
System.out.println(o);
//导入其他的java包,使用其他包中的java类
// String code = "importPackage(java.util);var list=Arrays.asList([\"xwd\",\"lsm\",\"bxd\"]);";
// engine.eval(code);
//
// List<String> list = (List<String>)engine.get("list");
// for(String l:list){
// System.out.println(l);
// }
//执行一个js文件
URL resource = Demo01.class.getClassLoader().getResource("pri/xiaowd/engine/test.js");
engine.eval(new FileReader(resource.getPath()));
}
}