Java之"Mozilla Rhino"引擎(二)

摘要:
前者可以从Java调用ECMAScript中的函数或对象,这与脚本的复杂性成正比。在编写ECMAScript时,可以通过名称直接引用它(2)JavaBean setter/getter可以直接引用属性(3)对于类,可以省略新的运算符和包。但是,需要注意的是,必须不是JavaBeans的数组对象必须在脚本中使用get(),

在Java中使用Rhino, 能让你使用类似Groovy, ECMAScript...等等之类的不同动态脚本语言, 其中值得推荐的是ECMAScript, 它是Rhino的默认实现, 同时也在JDK1.6中集成了.
使用ScriptEngine的时候, 还有二个接口, 看似不相关, 却是非常有用. 一个是Invocable, 一个是Compilable, 前者能从Java回调ECMAScript中的Function或者object, 后者能将ECMAScript脚本编译, 从而提升3~4倍性能, 这个系数不是固定的, 会随脚本的复杂度成正比.
在写ECMAScript的时候,
(1)存在ScriptContext中的attribute, 可以直接通过name引用.
(2)对于JavaBean的setter/getter可以直接引用property.
(3)对于类, 可以省略new运算符以及package.
但要注意, 像Map, List, Array这些必须非JavaBean的对象在Script中必须使用get(), put(), add()之类的方法来取存元素. 这让人很不爽, 不能像EL或者FreeMarker之类的语法. 但也没什么, 直接引用方法倒更像Java的语法. 
public static void main(String[] args) throws ScriptException {
  Map<String, Object> params = new HashMap<String, Object>();
  params.put("test", "这是一个小小的测试...");
  Bindings bindings = new SimpleBindings();
  bindings.put("params", params);
  Object result = engine.eval("println(params.get('test'));", bindings);

  System.out.println(result);
}

免责声明:文章转载自《Java之"Mozilla Rhino"引擎(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS 数据存储之 FMDB 详解docker下一步步部署sentry下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【WebApi系列】详解WebApi如何传递参数

原文地址:https://www.cnblogs.com/wangjiming/p/8378108.html 一 概述 一般地,我们在研究一个问题时,常规的思路是为该问题建模;我们在研究相似问题时,常规思路是找出这些问题的共性和异性。基于该思路,我们如何研究WebApi参数传递问题呢? 首先,从参数本身来说,种类较为多(如int,double,float,...

IOS开发—事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别

触摸事件 在用户使用app过程中,会产生各种各样的事件 一、iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIRespond...

Python线程指南(转)

1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元素改成1,而线程"print"负责从前往后读取列表并打印。那么,...

文件上传inputstream转为multipartfile

方式一 CommonsMultipartFile pom <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</g...

java内存泄露与内存溢出

java内存泄露与内存溢出 基本概念 内存泄露:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收,它始终占用内存。即被分配的对象可达但已无用。 内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。 从定义上看,内存泄露是内存溢出的一种诱因,不...

JavaEE 对象的串行化(Serialization)

什么情况下需要序列化 a)当你想把的内存中的对象写入到硬盘的时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;再稍微解释一下:a)比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔...