
花满天的季节
盼望着,盼望着,三月悄然来了。
一切都像刚睡醒的样子,犹如婴儿缓缓睁眼。
粉粉嫩嫩的花儿开始羞涩起来,
沉闷程序猿小哥哥开始躁动起来
小 E 也带着小妹妹悠悠公园深处。

万物生长
桃花运来了
闷闷直男小 E,带着小妹妹压着公园马路看着桃花内心小小的烂漫,话虽不多不爱自拍,但小妹妹在不爱自拍也融于这美美桃花之中,尽可能的绣着恩爱。
甜蜜中 
突如其来 
我的美梦就这样破碎了 
`、 、`、还没到三伏天的大雨`、、`、
`、 烦人逗比经理电话来了 、 `、、`、、`、
、 、`、、`、





Fel 在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求。
Fel 是开放的,引擎执行中的多个模块都可以扩展或替换。Fel 的执行主要是通过函数实现,运算符(+、-等都是 Fel 函数),所有这些函数都是可以替换的,扩展函数也非常简单。 Fel 有双引擎,同时支持解释执行和编译执行。可以根据性能要求选择执行方式。编译执行就是将表达式编译成字节码(生成 java 代码和编译模块都是可以扩展和替换的) Fel 基于 Java1.5 开发,适用于 Java1.5 及以上版本。
通常情况下,Fel-0.7 每秒可以执行千万次表达式(不包含编译时间)。速度是 Jexl-2.0 的 20 倍以上。 目前还没有发现开源的表达式引擎比 Fel 快。 项目虽然很久很久没有进行更新,但现有 BUG 甚少。最新版本为 0.9,但 maven 只到 0.8
<dependency> <groupId>org.eweb4j</groupId> <artifactId>fel</artifactId> <version>0.8</version> </dependency> 算术表达式:
FelEngine fel = new FelEngineImpl(); Object result = fel.eval("5000*12+7500"); System.out.println(result); 输出结果:67500 变量 使用变量,其代码如下所示:
FelContext ctx = fel.getContext(); ctx.set("单价", 5000); ctx.set("数量", 12); ctx.set("运费", 7500); Object result = fel.eval("单价*数量+运费"); System.out.println(result); 输出结果:67500 访问对象属性: FelEngine fel = new FelEngineImpl(); FelContext ctx = fel.getContext(); Foo foo = new Foo(); ctx.set("foo", foo); Map<String,String> m = new HashMap<String,String>(); m.put("ElName", "fel"); ctx.set("m",m); //调用 foo.getSize()方法。 Object result = fel.eval("foo.size"); //调用 foo.isSample()方法。 result = fel.eval("foo.sample"); //foo 没有 name 、getName 、isName 方法 //foo.name 会调用 foo.get("name")方法 result = fel.eval("foo.name"); //m.ElName 会调用 m.get("ElName"); result = fel.eval("m.ElName"); 编译执行: FelEngine fel = new FelEngineImpl(); FelContext ctx = fel.getContext(); ctx.set("单价", 5000); ctx.set("数量", 12); ctx.set("运费", 7500); Expression exp = fel.compile("单价*数量+运费",ctx); Object result = exp.eval(ctx); System.out.println(result); 执行结果:67500 访问数组、集合、Map 调用 JAVA 方法 自定义上下文环境 多层上下文环境(命名空间) 自定义函数 调用静态方法 大数值计算(始于 0.9 版本) 为了防止出现“${'System'}.exit(1)”这样的表达式导致系统崩溃。Fel 加入了安全管理器,主要是对方法访问进行控制。安全管理器中通过允许访问的方法列表(白名单)和禁止访问的方法列表(黑名单)来控制方法访问。将"java.lang.System. *"加入到黑名单,表示 System 类的所有方法都不能访问。将"java.lang.Math. *"加入白名单,表示只能访问 Math 类中的方法。如果你不喜欢这个安全管理器,可以自己开发一个,非常简单,只需要实现一个方法就可以了。
在此之前小 E 居然都不知道有这样强力的表达式计算引擎,就这样小 E 跟着逗比经理引导学习了一波强力的 Fel 。
小 E 正在着手对项目指标算费改造方案规划中……
有兴趣想知晓后续的同学可以留言并分享哦
----------------------------------- END -----------------------------------
盼望着 盼望着
小 E 的女朋友更近了
最近小 E 正在学习小程序相关的知识并开发了自己的小程序,有兴趣的同学可以加小 E 的 VX 并备注“小程序”,小 E 的 VX: Egzasn
也可以关注小 E 的公众号: 墨鲸说话