编译后 1000000次 ===>4091毫秒 100000次 ===>1255毫秒 不编译 1000000次 ===>27091毫秒 100000次 ===>3997毫秒 性能不是很好 mvel和rinho是它的2-3倍
package com.eyu.ahxy.module.expression.ognl; import ognl.Node; import ognl.Ognl; import ognl.OgnlContext; import org.junit.Test; /** * 编译后 1000000次 ===>4091毫秒 100000次 ===>1255毫秒 * 不编译 1000000次 ===>27091毫秒 100000次 ===>3997毫秒 * @author bean */ public class OgnlTest { String exp = "@java.lang.Math@min(@java.lang.Math@floor(test.a*test.getB()),@java.lang.Math@floor(c+d*e))"; public static final int NUM = 1000000; public int getA() { return 10; } public int getB() { return 10; } @Test public void compileTest() throws Exception { OgnlContext context = new OgnlContext(); context.put("test", new OgnlTest()); context.put("c", 10); context.put("d", 10); context.put("e", 2); OgnlContext context2 = new OgnlContext(); context2.setRoot(context); Node node = Ognl.compileExpression(context2, context2.getRoot(), exp); for (int i = 0; i < NUM; i++) { Object result = node.getAccessor().get(context2, context2.getRoot()); // System.err.println("=========" + result); } } }
使用的ognl的版本是 3.0.8
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.0.8</version>
</dependency>