我们知道,现在有很多脚本语言,大家平时使用的比较多的包括Perl,Python,Ruby,Javascript,Groovy,在这里我要介绍的是另外一个对象脚本语言BeanShell(http://www.beanshell.org)。
BeanShell的解释器是用Java写的,开源并且免费的,引用open-open上面的话来说明它的运作方式“它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在Perl和JavaScript中的一样。 它具有以下的一些特点:使用Java反射API以提供Java语句和表达式的实时解释执行;可以透明地访问任何Java对象和API;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行;与在应用程序中一样,可以在小程序中(Applet)正常运行(无需编译器或者类装载器);非常精简的解释器jar文件大小为175k ”。
每一种脚本语言都有它的使用场景,而正是因为其在某些场景的使用而使语言本身得到了发扬光大,比如Ruby正是因为Ruby On Rails这个Web框架的流行而得到开发者的关注,Groovy也一样;BeanShell可不能再有Web框架,Java世界的Web框架已经太多了,够让人头痛的了;BeanShell是Java语法,所以对Java开发者来说,很快就可以上手,BeanShell不能像Ruby,Perl,Ruby一样可以占据一个系统的主体,而只能在一些小的地方发挥“螺丝钉”的作用。
使用BeanShell可以处理现实中不规则的业务,举个很典型的例子,我们知道,一个保险公司有很多险种,每个险种的投入和收益的算法是很复杂的,无法用规则的关系数据库模型来描述,所以很多保险系统在处理险种的算法都是硬编码,如果要在系统中新加一个险种,是非常麻烦的,重新修改代码,重新发布,这对开发\维护人员和客户都是很痛苦的,有了BeanShell,我们可以从这种痛苦中解脱出来,对每个险种使用不同的脚本,新加的险种我们新配一个脚本,这样既可以满足业务多变的要求,又可以减少工作量,节约成本。
BeanShell的一个特点是动态执行Java代码,脚本文件改变不会影响当前脚本的调用,新脚本将在脚本的下一次调用生效,这不同于配置文件,配置文件改变一般都需要应用重启。
下面举个例子来说明BeanShell的使用(JDK1.5,BeanShell2.04),
调用文件:
import bsh.Interpreter;
public class TestShell
{
public static void main(String[] args) throws Exception
{
Interpreter inter = new Interpreter();
inter.set("inValue",new Integer(1));
inter.source("/D:/tomgether/test/shell/test.bsh");
System.out.println(((Integer)inter.get("outValue")).intValue());
}
}
Shell文件:
System.out.println("hello,in value is "+inValue);
outValue = inValue+1;
结果:
hello,in value is 1
2
有用的BeanShell命令
在刚才那个例子中我们用了一个内建在BeanShell中的一个方便的命令print(),来显示变量的值。print()跟ava的System.out.println()非常的相像,除非它能保证输出总是命令行。print()也可以显示一些对象的类型(如数组),但比Java的更详细。另一个相关的命令是show(),用来开启与关闭显示你输入的每一行的结果。
这儿是一些其它的BeanShell的命令:
source(), run() - 将一个bsh脚本读到解释器或运行在另一个解释器。
frame() - 显示一个Frame或JFrame的GUI组件.
load(), save() - 载入和保存一个序列化的对象到一个文件.
cd(), cat(), dir(), pwd(), etc. - 类unix的shell命令。
exec() - 运行一个本地的程序。
javap() - 打印一个对象的方法和字段,类似于Java的javap命令。
setAccessibility() - 开启无限制的存取private 和protected的组件。
要获得更多的信息请查看BeanShell命令的详细清单。
提示:
BeanShell命令并不是真的"内建"其中的,而是作为脚本方法自动从classpath载入的. 你可以扩展基本命令集并加到classpath中作为自订义的脚本来使用。
脚本方法
你可以在bsh中宣告和使用方法,就像在java的类中一样。
int addTwoNumbers( int a, int b ) {
return a + b;
}
sum = addTwoNumbers( 5, 7 ); // 12
bsh的方法可以有动态的(宽松的)参数和返回类型。
add( a, b ) {
return a + b;
}
foo = add(1, 2); // 3
foo = add("Oh", " baby"); // "Oh baby"
实现Interface
注意:如果要BeanShell能实现任意的Interface,必须有jdk1.3及以上支持。
你可以在脚本中用标准的Java内部类的语法来实现Interface.例如:
ActionListener scriptedListener = new ActionListener() {
actionPerformed( event ) { ... }
}
你可以不用实现Interface的所有方法,而只用实现你需要的方法。如果代码中调用了未被实现的方法,将丢出异常。如果你想重载大量的方法的行为--例如为日志生成一个"哑"适配器--你可以在脚本对象中实现一个特殊的方法:invoke(name,args)。invoke()方法用来处理任何未被定义的方法的调用:
ml = new MouseListener() {
mousePressed( event ) { ... }
// handle the rest
invoke( name, args ) { print("Method: "+name+" invoked!");
}
脚本对象
在BeanShell中,和在JavaScript与Perl中一样,脚本对象是用封闭的方法体一构成的。通过在方法未尾返回一个特殊值"this",你就可以像使用方法一样调用这个对象了。在这个方法调用时,你可以给与它任何的值。通常对象内部需要包括方法,所以BeanShell的脚本方法在一定程度上可再包含一些方法以构成脚本对象。例如:
foo() {
print("foo");
x=5;
bar() {
print("bar");
}
return this;
}
myfoo = foo(); // prints "foo"
print( myfoo.x ); // prints "5"
myfoo.bar(); // prints "bar"
如果这些代码对你来说很陌生,别急,请用户手册可得到更透彻的解释。
在你的脚本中,BeanShell脚本对象(也就是先前例子中的"this"参照)能自动实现任何JAVA介面类型。当JAVA代码调用相应与之通讯的脚本方法内的方法。当你试着将脚本对象作为参数传给Java方法时,BeanShell会自动将它造型(cast)为相应的类型。如要传递BeanShell外部的对象时,你可以在需要时显式的进行造型(cast).请看用户手册中的详细内容。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pengchua/archive/2009/05/07/4157682.aspx
分享到:
相关推荐
1. **BeanShell简介** - BeanShell是基于Java的脚本语言,它提供了类似Perl或JavaScript的语法,但支持完整的Java对象和API。 - 在JMeter中,BeanShell组件允许用户在测试计划中嵌入Java代码,处理请求和响应数据...
1. **BeanShell简介** BeanShell允许开发者编写Java脚本,并在运行时即时执行,无需编译。这使得它成为构建动态系统的好工具。在我们的公式管理系统中,BeanShell将用于解析和执行用户定义的公式。 2. **JDOM简介*...
#### 一、BeanShell简介 BeanShell是一种轻量级的脚本语言,其语法与Java高度兼容。它不仅支持标准的Java语法,还具备自己的特性和方法,使其成为开发环境中进行快速原型设计、自动化测试以及脚本编程的理想选择。...
#### 一、BeanShell简介 BeanShell是一款轻量级的可嵌入式Java源代码解释器和工具。它不仅支持完整的Java语法,还提供了一些额外的功能,如松散的数据类型处理和内置的实用命令。通过BeanShell,开发者可以在运行时...
BeanShell简介 BeanShell 的核心功能是作为一个即时(JIT)编译器,它可以解析并执行Java语法的子集。它不仅支持基本的Java语法,还提供了一些方便的脚本特性,如变量声明、函数定义和控制结构。BeanShell 是基于...
#### 三、BeanShell简介 BeanShell是一款小巧、免费且易于嵌入的Java代码解释器,它具有面向对象脚本语言的特点,同时支持标准的Java语句和表达式。BeanShell可以用于测试或调试Java代码,也可以作为应用程序的脚本...
为了帮助读者更好地理解和掌握智能Web算法,《智能Web算法》还提供了丰富的附录资料,包括BeanShell简介、网页爬虫技术、数学复习、自然语言处理基础、神经网络等内容。这些附录不仅能够帮助读者打下坚实的理论基础...
bsh(BeanShell)是一个轻量级的、动态的Java语言解释器,它允许在运行时执行Java语法和一些扩展语法的脚本。作为Java开发工具,bsh提供了一个强大的环境,开发者可以快速测试代码片段、原型设计、自动化任务,甚至...
**软件开发测试工具JMeter简介** JMeter是Apache组织提供的一款强大的、开源的性能测试工具,主要用于对Web应用进行负载和压力测试。它能够模拟大量并发用户,测试服务器、网络或对象的性能,并分析结果数据,帮助...
* 实现断言:使用正则表达式、Xpath、Json、Beanshell等技术实现断言。 * 实现接口之间响应值传递:使用Jmeter实现接口之间响应值传递。 * 实现自由拓展:使用OT框架实现自由拓展,满足不同测试场景的需求。 自动化...
**一、Bean Shell 简介** 1. **什么是 Bean Shell** Bean Shell 是一个遵循 Java 语法的轻量级脚本引擎,它允许用户编写类似于 Java 的代码进行动态执行。Bean Shell 支持动态类型,这意味着你不需要提前声明变量...
BeanShell是一个小型的Java源代码解释器,它可以让我们在Jmeter中编写Java代码来处理数据。 此外,我们还可以使用CSV Data Set Config组件来从CSV文件中读取数据,并将读取的数据作为参数传递给采样器。例如,我们...
jmeter简介??03. jmeter安装01??04. jmeter安装02?05. 目录结构介绍??06. 主界面菜单和工具栏介绍? ?07. jmeter第一个实战08. jmeter常用组件初步? ?09. 线程组?10. 采样器之HTTP请求0?11. 采样器之HTTP请求02? ?12...
7. **脚本支持**:支持BeanShell和其他BSF兼容语言的脚本取样器,允许用户编写脚本来模拟复杂的行为或自动化测试逻辑。 8. **动态输入与数据操作**:JMeter可以处理动态输入,例如从外部文件、数据库或变量中获取...
** mavscript 开源项目简介** Mavscript 是一个独特的开源工具,它允许用户在普通的文本文档中执行计算任务。这个创新的系统结合了文本编辑的便利性和计算环境的功能,为用户提供了无缝的编程和计算体验。Mavscript...
#### 一、接口自动化测试方法简介 **1.1 了解待测接口参数规范** - **基础知识**: 在进行接口测试前,首先要熟悉待测接口的基本信息,包括但不限于接口的功能描述、输入参数、输出结果、错误码等。 - **实践操作**...
一、JMeter简介 JMeter是一款用于负载和性能测试的Java应用程序,它最初设计用来测试Web应用,但后来扩展到其他协议,如FTP、SMTP、SOAP、REST等。JMeter允许用户模拟多个并发用户对服务器进行请求,以此来评估系统...
#### 一、JMeter简介 **Apache JMeter** 是一款100%纯 Java 桌面应用程序,主要用于压力测试和性能测试。它能够模拟大量的用户请求,测试服务器、网络或对象在不同负载下的表现,并帮助开发者分析系统的稳定性和...
### JMeter简介 JMeter是一款开源的性能测试工具,主要用于负载测试和功能测试。它能够模拟服务器或网络应用的高负载情况,并测量其性能。JMeter主要用于测试Web应用程序或服务器,可以用于测试静态和动态资源,如...
- 取样器(Sampler)负责发送请求并记录响应,如HTTP Request、FTP Request、TCP Request、JDBC Request等,Java Request和Beanshell Request提供自定义功能。 - 逻辑控制器调整测试逻辑,如If Controller、Switch...