提高java编程质量 - (一)易变业务使用脚本语言编写
脚本语言的3大特征:
1、灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型;
2、便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务
3、简单:脚本语言语法比较简单,易学
另外:java6以上默认支持JavaScript
Java SE6加入了对JSR223的实现, JSR223旨在定义一个统一的规范,使得java应用程序可以通过一套固定的接口定义与各个脚本引擎交互,从而达到java平台上调用各个脚本语言的目的。
接口定义在javax.script下面。从而使java语言可以执行javascript,ruby,python等动态语言。
其中javascript的解析引擎是使用Mozilla Rhino不过是经过修改的。Mozilla Rhino是一个开源的java实现javascript的项目,jdk6中引入了Rhino1.6R2 版本,有了java对javascript的实现,对于java开发人员来说是一个非常便利事情。 下面将介绍如何在java代码中使用javascript。相关的实现在javax.script 包下面。
定义了 Invocable 、ScriptEngine 、ScriptEngineFactory 、Bindings 、ScriptContext 这5个主要接口。
例子:
package com.test; import java.io.FileNotFoundException;
import java.io.FileReader; import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; /**
* java执行脚本语言
* @author jd
*
*/
public class javascript { public static void main(String[] args){ //获取一个JavaScript执行引擎
ScriptEngine se = new ScriptEngineManager().getEngineByName("javascript"); //声明上下文 变量
Bindings bind = se.createBindings();
bind.put("variable","结果:");
//变量的作用域,当前引擎范围内(常量ScriptContext.ENGINE_SCOPE表示的作用域对应的是当前的脚本引擎,而ScriptContext.GLOBAL_SCOPE表示的作用域对应的是从同一引擎工厂中创建出来的所有脚本引擎对象。前者的优先级较高。)
se.setBindings(bind,ScriptContext.ENGINE_SCOPE); try {
//执行js代码
se.eval(new FileReader("E:/model.js")); //是否可调用方法
if(se instanceof Invocable){
Invocable in = (Invocable) se;
//执行js的方法
String result = (String) in.invokeFunction("formula",2,10);
System.out.println(result);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ScriptException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} } }
情景1:
function formula(a,b){
return variable+ (a*b);
}
结果:
结果:20
情景2:
function formula(a,b){
return variable+ (a+b);
}
结果:12
情景...
所以在变更业务时,不需要重启 java服务器,就可顺利变更业务,对于变更频繁的业务,这就是很好的解决方案。
PS:Java 6 不仅仅提供代码级的脚本内置,还提供了jrunscript命令工具,它可以在批处理中发挥巨大的效能,而且不需要通过JVM解释脚本语言,可直接通过该工具运行脚本;
提高java编程质量 - (一)易变业务使用脚本语言编写的更多相关文章
- [改善Java代码]易变业务使用脚本语言编写
建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...
- Java之戳中痛点 - (1)易变业务使用脚本语言编写
脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...
- 提高java编程质量 - (四)i++ 和 ++i 探究原理
先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...
- 提高java编程质量 - (二)取余用偶判断,不要用奇判断
取余判断原则:取余用偶判断,不要用奇判断 先看一个 程序: package com.test; import java.util.Scanner; public class t1 { public s ...
- 提高java编程质量 - (五)switch语句break不能忘以及default不同位置的用法
先看一段代码: public class Test{ public static void main(String[] args){ System.)); } } public static Stri ...
- 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致
先看一个例子: package com.test; public class TernaryOperator { public static void main(String[] args) { in ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...
- java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言
简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...
- 有效提高java编程安全性的12条黄金法则
安全性是软件开发中最复杂,最广泛和最重要的考量之一.Java是具有许多内置安全性功能的开发平台,java在长期的发展过程中,已经经过了很多高强度的安全测试,并经常更新安全漏洞.并且Java生态系统还包 ...
随机推荐
- java 解析xml文档---通过XmlPullParser解析方式
package com.zx; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayLi ...
- Redisson入门
Redisson入门 Author:Ricky Date:2017-04-24 Redisson概述 Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Dat ...
- 仿:Android - 微信 - 朋友圈 - 小视频播放,多 4 句废话算我输
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- JS 部分常见循环、分支、嵌套练习
图形题思路:1.确定图形一共几行,即为外层的循环次数2.确定每行有几种元素,代表有几个内层循环3.确定每种元素的个数,即为每个内层循环的次数 通常,找出每种元素个数,与行号的关系式,即为当前内层循 ...
- poj2104 Kth-Number
Description You are working for Macrohard company in data structures department. After failing your ...
- 关于quotename的用法
首先,sqlserver里的标识符有一定的规则,比如 你 create table abc 123(...) 那么中间含有空格,它不是符合规则的. 你会写做 create table [abc 12 ...
- WebGIS开源解决方案之开发环境搭建(四)
续前几篇文章,前面陆续介绍了开源GIS服务器Geoserver,开源数据库Postpresql以及开源前端udig的安装和基本使用. WebGIS前端开发,可以选择arcgis for javascr ...
- 为什么要用Handler ?
我的理解,Handler的好处之一就是配合子线程处理数据之后控制UI的显示. 如下是http://www.cnblogs.com/sydeveloper/p/3312865.html的完美解释: 当应 ...
- Spring Cloud 学习笔记(一)——入门、特征、配置
[TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...
- ST-2
1.第一个程序没有覆盖到下表为0的数.第二个程序找到的是x中第一个等于0的数的下标. 2.对于第一个程序:x = [2,3,5], y = 3 对于第二个程序:X = [2,0,6] 3.对于两个程序 ...