日期:2014-05-16 浏览次数:21289 次
import java.util.Map;
import org.apache.commons.jexl2.Expression;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
/**
* 动态加载方法
* @author wangyfc
*
*/
public class DyMethodUtil {
public static Object invokeMethod(String jexlExp,Map<String,Object> map){
JexlEngine jexl=new JexlEngine();
Expression e = jexl.createExpression(jexlExp);
JexlContext jc = new MapContext();
for(String key:map.keySet()){
jc.set(key, map.get(key));
}
if(null==e.evaluate(jc)){
return "";
}
return e.evaluate(jc);
}
} Map<String,Object> map=new HashMap<String,Object>();
map.put("testService",testService);
map.put("person",person);
String expression="testService.save(person)";
DyMethodUtil.invokeMethod(expression,map); package jexl.test;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
public class Tester {
/**
* @param args
*/
public static void main(String[] args) {
// 描述一个人,他有两条腿
Map<String, Object> person=new HashMap<String, Object>();
person.put("skinColor", "red"); // 皮肤为红色
person.put("age", 23); // 年龄23
person.put("cash", 60.8); // 身上有60.8元现金
// 左腿定义
Map<String, Object> leg1=new HashMap<String, Object>();
leg1.put("leftOrRight", "left"); // 左腿
leg1.put("length", 20.3); // 腿长多少
leg1.put("hair", 3000); //有多少腿毛
// 右腿定义
Map<String, Object> leg2=new HashMap<String, Object>();
leg2.put("leftOrRight", "right"); // 右腿
leg2.put("length", 20.3); // 腿长多少
leg2.put("hair", 3050); //有多少腿毛
// 给他两条腿
List<Map<String, Object> > legs=new ArrayList<Map<String, Object> >();
legs.add(leg1);
legs.add(leg2);
person.put("leg",legs);
// 让这个人变成一个Context,以便Jexl认识他
JexlContext context = new MapContext(person);
JexlEngine engine=new JexlEngine(); // 定义引擎, 1.1与2.1的用法不同,1.1使用