[size=medium]编译后 1000000次 ===>4091毫秒 100000次 ===>1255毫秒
不编译 1000000次 ===>27091毫秒 100000次 ===>3997毫秒
性能不是很好 mvel和rinho是它的2-3倍
ongl使用静态方法的形式不太好:@java.lang.Math@min(3,5),这个样子,有点蛋疼啊[/size]
使用的ognl的版本是 3.0.8
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.0.8</version>
</dependency>
不编译 1000000次 ===>27091毫秒 100000次 ===>3997毫秒
性能不是很好 mvel和rinho是它的2-3倍
ongl使用静态方法的形式不太好:@java.lang.Math@min(3,5),这个样子,有点蛋疼啊[/size]
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>