Beanshell简单例子

来源:互联网 发布:k60单片机 编辑:程序博客网 时间:2024/06/12 00:09

Beanshell是轻量级的java 脚本语言。
官方主页http://www.beanshell.org, 通过简介我们可以看到使用beanshell可以给我们基于java的程序增加动态编程功能。 下面就给出几个示例。

1, 通过BSFManager

如下例子我们可以看到首先给脚本增加2两个变量,第一个是类型为Integer的var1, 第二个是当前时间,类型为Date。 然后String var1 = var1 + “_” + date.toString(); 返回var1的值。

import java.util.Date;import org.apache.bsf.BSFException;import org.apache.bsf.BSFManager;public class BeanShellManagerDemo {    public static void main(String[] args) {        BSFManager mgr = new BSFManager();        try {            // Set variables            mgr.declareBean("var1", 5, Integer.class);            mgr.declareBean("date",  new Date(), Date.class);            String script = "import java.util.Date;"                    +" String var1 = var1 + \"_\" + date.toString();"                    +" return var1";            Object result = mgr.eval("beanshell", "no", 0, 0, script);            System.out.println("source result:" + result);        }        catch (BSFException ex) {            ex.printStackTrace();        }    }}

运行结果为source result:5_Mon Aug 08 22:45:18 CST 2016。 注意具体时间会变化的。

第二种,使用Interpreter。

与第一种情况类似,我们首先设置了两个变量var1和date,然后获取date,已经对var1进行运算。 后面我们加载了demo.bsh文件,这是个文本文件。内容为return var1 + “_abc”;

import java.io.IOException;import java.util.Date;import bsh.EvalError;import bsh.Interpreter;public class beanshell {    /**     * @param args     */    public static void main(String[] args) {        Interpreter i = new Interpreter();  // Construct an interpreter        try {            // Set variables            i.set("var1", 5);            i.set("date", new Date() );             Date date = (Date)i.get("date");            System.out.println("CurrentDate:" + date );            // Eval a statement and get the result            i.eval("bar = var1*10");            // retrieve a variable            System.out.println( i.get("bar") );            // Source an external script file            try {                Object obj = i.source("demo.bsh");                System.out.println( "source result:" + obj);            }            catch ( IOException e) {                e.printStackTrace();            }        }        catch (EvalError e) {            e.printStackTrace();        }    }}

最终运行结果为:
CurrentDate:Mon Aug 08 22:49:28 CST 2016
50
source result:5_abc

注意:通过测试发现,使用BSFManager,脚本的容错性更高,比如当使用BSFManager,script内容为“qqqqqqxxxx”也不或发生异常,但是如果使用Interpreter和load就直接报错了。
我使用的是bsh-2.0b4.jar

0 0
原创粉丝点击