ognl性能测试

编译后 1000000次 ===>4091毫秒 100000次 ===>1255毫秒
不编译 1000000次 ===>27091毫秒 100000次 ===>3997毫秒

性能不是很好 mvel和rinho是它的2-3倍

ongl使用静态方法的形式不太好:@java.lang.Math@min(3,5),这个样子,有点蛋疼啊



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>

你可能感兴趣的:(Ognl)