Java 中使用 javascript 等脚本语言实现非编译逻辑分离

有些常改变的逻辑,或者配置性的逻辑,比如最近在项目中遇到的,开发环境与正式环境的 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 于分类 .

reeoo.com - web design inspiration

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注