有些常改变的逻辑,或者配置性的逻辑,比如最近在项目中遇到的,开发环境与正式环境的 ip 地址,端口的不同。以及启动项、模块 Lazy loading 的部分代码,介于配置文件与代码之间的很多模糊的地方,其实可以用JRE 自带的 ScriptEngine 实现。
这部分半配置半程序的代码可以用JS 写到固定的相对目录下。用 FileReader 加载然后执行就可以了。
因为是动态语言,无需编译,在布署时可以直接修改部分参数,还可以用 require,甚至可以继承等一些高级语言语法来实现DRY(don’t repeat yourself)。
示例如下:
public class ScriptTest { public static void main(String[] args) throws Exception{ ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); Bindings bind = engine.createBindings(); bind.put("c", 3); engine.setBindings(bind, ScriptContext.ENGINE_SCOPE); engine.eval(jsStr); // engine.eval(new FileReader("f:/aaa.txt")); if(engine instanceof Invocable){ Invocable in = (Invocable) engine; Double result = (Double) in.invokeFunction("test", 1,2); System.out.println(result); } } static String jsStr = "function test(a,b){ return (a+b)*c;}"; }
发表于 03/09/2013 , 03:21 于分类 Java.