Atitit java 动态表达式调用类方法 最佳实践 Ognl 新来的MVE Beanshell Groovy 目录 1.1. Beanshell 可以的 1 1.2. MVEL 好像

Atitit java 动态表达式调用类方法   最佳实践  Ognl  新来的MVE Beanshell  Groovy

 

 

目录

1.1. Beanshell 可以的 1

1.2. MVEL 好像没有找到 1

1.3. Ongl可以的。。 1

1.4. Groovy 2

 

 

 老牌的Ognl(老到网站都找不到了) 新来的MVEL 国产的Aviator 目前最快的JSEL:JSEL测试表达式

 

    1. Beanshell 可以的

比groovy更加的语法兼容java

 

import bsh.EvalError;

import bsh.Interpreter;

import bsh.NameSpace;

import javassist.expr.NewArray;

 

public class bshBbeanshellTestV2t33 {

 

 

public void methDync() {

System.out.println("--meth dync");

}

///bookmarksHtmlEverythingIndexPrj/src/bshBbeanshellTestV2t33.java

public static void main(String[] args) throws EvalError, FileNotFoundException, IOException {

//t();

Interpreter i = new Interpreter(); // Construct an interpreter

System.out.println(i.eval("   new bshBbeanshellTestV2t33().meth()   "));

}

    1. MVEL 好像没有找到

 

    1. Ongl可以的。。

 

3. 对静态变量的访问

在OGNL表达式当中也可以访问静态变量或者调用静态方法,格式如@[class]@[field/method()]。具体代码如下:

 

4. 方法的调用

  如果需要调用Root对象或者上下文对象当中的方法也可以使用.+方法的方式来调用。甚至可以传入参数。代码如下:

    1. Groovy

import java.util.Map;

import java.util.Set;

 

import javax.script.Compilable;

import javax.script.CompiledScript;

import javax.script.ScriptContext;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

import javax.script.SimpleScriptContext;

 

import org.codehaus.groovy.ant.Groovy;

 

import com.google.common.collect.Maps;

///bookmarksHtmlEverythingIndexPrj/src/groovyDemo.java

public class groovyDemo {

 

public void methDync() {

System.out.println("--meth dync");

}

 

public static void main(String[] args) throws ScriptException {

 

Groovy groovy = new Groovy();

System.out.println(execute("new groovyDemo().methDync();return 1", Maps.newConcurrentMap()));

;

}

 

public static Object execute(String scriptText, Map<?, ?> context) throws ScriptException {

 

Compilable engine; // 获取groovy编译类

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engineByName = manager.getEngineByName("groovy");

engine = (Compilable) engineByName;

// org.codehaus.groovy.jsr223.GroovyScriptEngineImpl

// apache-groovy-sdk-2.5.6\groovy-2.5.6\lib\groovy-jsr223-2.5.6.jar

CompiledScript script = engine.compile(scriptText);

// 这个地方需要使用缓存,达到编译一次,多次执行。

 

ScriptContext scriptContext = new SimpleScriptContext();

//

return script.eval();

 

}

 

// Set<?> its = context.entrySet(); // 上下文参数

// for (Object o : its) {

// // @SuppressWarnings("rawtypes")

// // Entry entry = (Entry)o;

//// scriptContext.setAttribute( LangUtil.getString(entry.getKey()),  

//// entry.getValue(), ScriptContext.ENGINE_SCOPE); //copy到groovy执行环境上下文

// }

// return script.eval(scriptContext); // 执行groovy脚本}

// ScriptContext defaultCtx = ((ScriptEngine) engine).getContext();

}

 

OGNL表达式介绍 - 一步一个脚印,坚持 - 博客园.htm

 

 

猜你喜欢

转载自blog.csdn.net/attilax/article/details/89032784