最近的这个项目使用了规则引擎,是我的一位同事负责的这块东西,我是一直没弄明白是怎么回事,现在我也研究一下。
先弄明白什么是规则引擎吧。
规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
应用背景: 企业级管理者对企业IT系统的开发有着如下的要求:
1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。
2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。
3.为了快速、低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与。
使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本,其优点如下:
• 分离商业决策者的商业决策逻辑和应用开发者的技术决策;
• 能有效的提高实现复杂逻辑的代码的可维护性;
• 在开发期间或部署后修复代码缺陷;
• 应付特殊状况,即客户一开始没有提到要将业务逻辑考虑在内;
• 符合组织对敏捷或迭代开发过程的使用;
大多数规则引擎都支持规则的次序和规则冲突检验,支持简单脚本语言的规则实现,支持通用开发语言的嵌入开发。目前业内有多个规则引擎可供使用,其中包括商业和开放源码选择。开源的代表是Drools,商业的代表是iLog。
我这里是用mvel来解析表达式,先来弄明白mvel是什么吧。
MVEL是一种用于Java应用程序,类似于OGNL的表达式语言。MVEL不仅非常小和敏捷,而且它的语法易于阅读与EL 或OGNL比起来更像Java。比如静态方法和属性的引用方式与Java一样,赋值也非常像Java。
该项目主页:http://mvel.codehaus.org 。
介绍mvel的一个文章:
MVEL为 MVFLEX Expression Language(MVFLEX表达式语言)的缩写,它是一种动态/静态的可嵌入的表达式语言和为Java平台提供Runtime(运行时)的语言。最初是作为一个应用程序框架实用程序的语言开始,该项目现已发展完全独立。MVEL通常用于执行用户(程序员)通过配置XML文件或注释等定义的基本逻辑。它也可以用来解析简单的JavaBean表达式。Runtime(运行时)允许MVEL表达式通过解释执行或者预编译生成字节码后执行。
下面介绍下如何使用MVEL。
首先,从MVEL的主页http://mvel.codehaus.org/Downloading+MVEL下载MVEL,目前版本为2.0.18,支持JDK1.5以上版本。
下载完后,新建MvelDemo工程,添加mvel2-2.0.18.jar到Build Path。
编写测试代码,示例如下:
public class MVELTest {
public static void main(String[] args) {
String expression = "foobar > 99";
Map vars = new HashMap();
vars.put("foobar", new Integer(100));
// We know this expression should return a boolean.
Boolean result = (Boolean) MVEL.eval(expression, vars);
if (result.booleanValue()) {
System.out.println("It works!");
}
}
}
执行结果为:It works!
以上简单介绍了下MVEL,以及如何在你的代码中使用MVEL。
如果想对MVEL有更多了解,可以阅读MVEL官方文档。