在实际工作的项目中经常会碰到一些规则,这些规则按笔者经验有如下解决方案:
1,通过设计模式处理,如策略模式+模板方法。
2,通过规则引擎,如drools
3,通过JS引擎
从JDK 8开始,Nashorn取代Rhino成为Java的嵌入式JavaScript引擎,带来了2到10倍的性能提升。相比复杂的设计模式和drools引擎,新的Nashorn引擎方案在实际项目中是不错的选择。
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class JsUtils {
private static final ScriptEngineManager ENGINE_MANAGER = new ScriptEngineManager();
private static final ThreadLocal<ScriptEngine> LOCALS = new ThreadLocal<ScriptEngine>() {
@Override
protected ScriptEngine initialValue() {
return ENGINE_MANAGER.getEngineByName("nashorn");
}
};
public static boolean test(final String script, final int val) {
try {
ScriptEngine engine = LOCALS.get();
engine.eval(script);
return (boolean) ((Invocable) engine).invokeFunction("test", val);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] vargs) {
String scrips = "function test(val){return val>=100;}";
System.out.print(JsUtils.test(scrips, 120));
}
}

本文介绍了一种利用Nashorn JavaScript引擎实现规则处理的方法。Nashorn自JDK8起成为Java内置的JS引擎,相比传统的设计模式或规则引擎如drools,它提供了更简便高效的解决方案。文中提供了一个具体的例子,演示如何使用Nashorn来定义和执行简单的规则。
1356

被折叠的 条评论
为什么被折叠?



