• 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

     

     

  • 相关阅读:
    nginx+php-fpm 配置和错误总结
    C#——Winform 无边框随意拖动【转载】
    C#——Socket
    asp.net——Base64加密解密
    asp.net——上传图片生成缩略图
    C#——获取远程xml文件
    SQL Server—— 如何创建定时作业
    asp.net——正则表达式
    asp.net——Josn转DataTable(转)
    JS——EasyuiCombobox三级联动
  • 原文地址:https://www.cnblogs.com/attilax/p/15197355.html
Copyright © 2020-2023  润新知