class C(){
public String getS1(){
return _s1;
}
public String getS2(){
return _s2;
}
public void setS1(String s){
_s1=s;
}
public void setS2(String s){
_s2=s;
}
//javascript可以直接for操作java中的list
public List<String> list=Arrays.asList("111","222","333");
}
//java8下才能编译
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
//生成一个java对象,用于与javascript脚本交户
C cc=new C();
cc.s1="java set s1";
cc.setS2("java set s2");
//将cc对象暴露给脚本
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("cc", cc);
//执行脚本
nashorn.eval("print('cc.s1='+cc.getS1());for(var i in cc.list) print(i+'='+a[i]);cc.setS2('js set')",simpleBindings);
System.out.println("cc.s2="+cc.getS2());
输出:
cc.s1=java set s1
0=111
1=222
3=333
cc.s2=js set
也就是很容易通过binding将java中的对象引入js的上下文,js可以随意操纵java的对象.
可以将一些计算类脚本用js来写,然后在java中动态执行.
典型的比如一个计算绩效工资的模块,可以让每个用户自己通过js脚本来实现复杂规则,而无需统一编码了