`

Groovy超强的Java动态计算能力

    博客分类:
  • java
阅读更多
//Groovy超强的Java动态计算能力 groovy-2.5.12.jar apache  表达式语言 
public class GroovyTest {

public static void main(String[] args) {

GroovyShell shell = new GroovyShell();
        Object result = shell.evaluate("(1+5)/2");
        System.out.println(result);
       
        Binding binding = new Binding();
        binding.setVariable("p",3.1415926f);
        binding.setVariable("r",5);
        GroovyShell shell2 = new GroovyShell(binding);
        result = shell2.evaluate("p*r*r");
        System.out.println(result);
       
        result = shell2.evaluate("Math.round(p*r*r)");
        System.out.println(result);
       
        String s = "2>3||3>4&&5<4";
        result = shell.evaluate(s);
        System.out.println(result);
       
//        String javacode="SimpleDateFormat.getDateInstance().format(new Date())";
//        result = shell.evaluate(javacode);
//        System.out.println(result);
       
        //shell.parse(new File(//)) 
        Script script = shell2.parse("def join(String[] list) {return list.join('--');}"); 
        String joinString = (String)script.invokeMethod("join", new String[]{"A1","B2","C3"}); 
        System.out.println(joinString);
       
        //反射动态调用groovy类
        GroovyTest g=new GroovyTest();
//        g.java2groovy();
       
       
        g.grooyScript();
        //自定义函数
       
}

private void java2groovy() {
//获取 groovy 类的反射对象
        ClassLoader parent = getClass().getClassLoader(); 
        GroovyClassLoader loader = new GroovyClassLoader(parent); 
        Class groovyClass=null;
try {
groovyClass = loader.parseClass(new File("G:\\neweclipse\\workspace\\bsh\\src\\bsh\\GroovyDemo.groovy"));
//实例化 GroovyDemo 类
        GroovyObject groovyObj = (GroovyObject) groovyClass.newInstance(); 
        //调用 groovyDemo 成员方法
        System.out.println( groovyObj.invokeMethod("sayHello",null));
} catch (CompilationFailedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();

}

//自定义函数
void grooyScript() {
String path = "G:\\neweclipse\\workspace\\bsh\\src\\bsh\\";
GroovyScriptEngine gse;
try {
gse = new GroovyScriptEngine(path);
Binding binding = new Binding();
binding.setVariable("input", "Groovy");
gse.run("GroovyDemo.groovy", binding);
System.out.println(binding.getVariable("output"));
} catch (Exception e) {
e.printStackTrace();
}
}

//自定义函数
void cusFunction() {
Binding binding = new Binding();
//         if(vars!=null) {
//             vars.keySet().forEach(name ->
//                     binding.setVariable(name, vars.get(name))
//             );
//         }
        CompilerConfiguration cfg = new CompilerConfiguration();
        cfg.setScriptBaseClass(DateUtils.class.getName());
        GroovyShell shell = new GroovyShell(binding,cfg);

        try {
            Script script = shell.parse(buildScript());
            return script.run();
        } catch (Exception ex) {
            logger.error("catch script execution error, script:"+buildScript(), ex);
            return 0;
        }
}

}
分享到:
评论

相关推荐

    groovy和Java相互调用1

    这种Java与Groovy的交互能力使得开发者可以灵活地利用两种语言的优势,比如Groovy的简洁语法和Java的广泛库支持。这种混合编程方式在构建复杂的系统,特别是那些需要快速原型设计和迭代的系统时,可以提供更大的灵活...

    Java调用Groovy,实时动态加载数据库groovy脚本

    Groovy代码可以被Java编译器理解,并且在运行时,GroovyShell或GroovyClassLoader等工具能够即时编译和执行Groovy脚本,这为动态加载和执行提供了便利。 当我们需要在Java程序中调用Groovy脚本时,可以使用以下步骤...

    java 动态脚本语言 精通 Groovy

    Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    java动态代码执行

    Java动态代码执行是一种在运行时编译和执行代码的技术,它可以极大地提高程序的灵活性和可扩展性。在Java中,Groovy是一个强大的脚本语言,它与Java语法兼容,并且可以无缝集成到Java应用程序中,使得动态代码执行变...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    本文将深入探讨如何基于Groovy实现Java脚本的动态编译、部署和发布,并且介绍如何通过Groovy脚本直接调用Dubbo接口,从而提高开发效率和灵活性。 Groovy是一种基于Java平台的强大的动态编程语言,它具有简洁的语法...

    groovy调用java-se类库学习案例 Java学习资料

    此外,Groovy还提供了许多Java没有的特性,如闭包(Closure)、元编程(Metaprogramming)和DSL(领域特定语言)构造,这些都极大地扩展了Groovy的能力。在与Java SE类库交互时,你可能会发现这些特性使代码更具表达...

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Groovy脚本:Java平台的动态编程利器

    Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...

    hugo110-java_run_groovy-master_java_

    这暗示了该项目不仅涉及基本的Groovy语法,还可能涵盖如何在Java环境中集成Groovy,以及如何利用Groovy的灵活性来执行动态任务。 Groovy是一种基于Java平台的动态编程语言,它与Java语法相似,但提供了更简洁、灵活...

    groovy与java的区别1

    此外,Groovy的元编程能力允许程序在运行时动态地添加或修改类、方法和字段,这种能力在Java中是很难实现的。 数据结构方面,Groovy的列表默认为ArrayList,映射为LinkedHashMap,范围继承自列表。这些默认设置考虑...

    Java Groovy

    ### Java与Groovy:融合的力量 #### 知识点一:Java与Groovy的关系 - **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:...

    SpringBoot-Gradle-Maven-Java-Groovy

    5. **Groovy**: Groovy是基于JVM的动态语言,语法简洁,与Java高度兼容,可以直接调用Java库。Groovy可以用于编写Gradle构建脚本,使得构建过程更加简洁和灵活。此外,Groovy也常用于服务器端开发,如Grails框架,...

    groovy 最新 学习 动态

    Groovy是一种基于Java平台的动态编程语言,设计用于提高开发者的生产力和代码的简洁性。在Java生态系统中,Groovy以其灵活性和与Java的良好互操作性而受到广泛关注。本篇文章将深入探讨Groovy的最新学习动态,特别是...

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API并动态发布,且发布后可动态执行groovy脚本及SQL脚本的API服务项目。提供在线执行动态程序脚热加载本及动态生成API并执行的功能。支持动态...

    Groovy大量计算导致oom的解决办法

    下载的资源文件中,封装了并发计算以及内存溢出解决方案的工具类GroovyEngine.java,调用示例: GroovyEngine engine = GroovyEngine.getInstance(); engine.put("a",1); engine.put("b",2); Object v1 = engine....

    groovy-src-1.8.5.zip_.bzrignore_Groovy_Java 8_groovy src_lowern

    Groovy结合了脚本语言的简洁性和动态性,同时提供了静态类型的编译选项,使得它在Java开发环境中尤其受欢迎。在这个"groovy-src-1.8.5.zip"压缩包中,我们能找到Groovy 1.8.5版本的源代码,这对于学习、调试或扩展...

    Java调用Groovy

    Java调用Groovy是一种常见的技术,特别是在开发过程中需要动态脚本支持时。Groovy是一种基于JVM(Java Virtual Machine)的、动态类型的编程语言,它与Java有着良好的互操作性,能够无缝集成到Java项目中。这篇博客...

    JVM 动态执行Groovy脚本的方法

    本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...

Global site tag (gtag.js) - Google Analytics