当前位置: 首页 > 工具软件 > Beanshell > 使用案例 >

Beanshell简单例子

侯兴为
2023-12-01

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

 类似资料: