`
小网客
  • 浏览: 1216568 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDK6.0对Script的支持参考例子

    博客分类:
  • Java
 
阅读更多

概述:

 

        JDK6.0中对Script语言的支持,默认支持javascript,从而使得开发变的简洁,适用场景如下:

有个业务逻辑处理,需要根据提供的工资,然后计算出应缴的税,2009年假定为(工资-800)*20%为上缴的税

采用java实现的方式如下:

 

public double geTax(double salary){
       Return (salary-800)*0.2;
}

 到2010年发生了变化,变为(工资-2000)*20%为上缴的税

 

修改代码,重启服务,代码如下:

 

public double geTax(double salary){
       Return (salary-3000)*0.2;
}

 然后又发生了变化......,

 

针对此类可以通过javascript进行实现,从而实现热部署。

调用脚本步骤:

Step1.创建ScriptEngineManager

 

ScriptEngineManager sem = new ScriptEngineManager();

 Step2.根据ScriptEngineManager创建ScriptEngine

 

 

ScriptEngine engine = sem.getEngineByName("ECMAScript");

 Step3.通过ScriptEngine加载脚本

 

 

engine.eval(scriptStr);

 Step4.脚本的调用执行

 

 

//执行方法的采用Invocable

//执行内置对象的需要先获取内置对象然后调用callMethod进行执行

 

调用脚本中的对象方法:

定义脚本如下:F:\script\oo.js

 

function Person(name) {   
     this.name = name;   
};    
Person.prototype.say = function(str) {  
      return this.name+" can say :"+str;
};  

 Java中调用: 

 

 

String filepath = "F:/script/oo.js";
File file = new File(filepath);
FileReader scriptReader = new FileReader(file);
ScriptEngineManager sem = new ScriptEngineManager();//
ScriptEngine engine = sem.getEngineByName("ECMAScript");
engine.eval(scriptReader);
Invocable inv = (Invocable) engine;
Object obj = inv.invokeMethod(engine.eval("new Person('baidu');"), "say",
	"www.someabcd.com 是个好网站!");
System.out.println(obj);

 调用脚本中的方法:

 

1.定义脚本如下:

 

F:\script\fun.js
function getMax(a, b){
    return a>b?a:b;
}

 2.Java中调用:

 

String filepath = "F:/script/fn.js";
File file = new File(filepath);
FileReader scriptReader = new FileReader(file);
ScriptEngineManager sem = new ScriptEngineManager();//
ScriptEngine engine = sem.getEngineByName("ECMAScript");
engine.eval(scriptReader);
Invocable inv = (Invocable) engine;
Object obj = inv.invokeFunction("getMax", 100, 101);
System.out.println(String.format("the max value is:%s", obj));

 调用脚本中的内置对象:

1.定义脚本如下: F:\script\reg_exp.js

var reg = new RegExp("a+b");

 2.Java中调用:

String filepath = "F:/script/reg_exp.js";
File file = new File(filepath);
FileReader scriptReader = new FileReader(file);
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("ECMAScript");
engine.eval(scriptReader);
NativeRegExp nre = (NativeRegExp) engine.get("reg");
String input = "aaaaaaaaaaaab";
Object result = NativeRegExp.callMethod(nre, "test", new Object[] {input });
System.out.println(String.format("call regular expression:%s  input:%s output :%s",
        nre.toString(), input, result));

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics