在实际工作的项目中经常会碰到一些规则,这些规则按笔者经验有如下解决方案:
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));
}
}