java集成groovy

首先介绍Groovy的几种集成方式:groovyshell、GroovyClassLoader、GroovyScriptEngine

①groovyshell的方式不支持脚本缓存,会导致垃圾回收频繁,并且会出现outofmemoryexception

②GroovyClassLoader、③GroovyScriptEngine
两者性能上比较接近

直接上代码解释:
①groovyshell 静态加载groovy

  //直接运行groovy脚本语句,不推荐
  public static void test() {
        GroovyShell shell = new GroovyShell();
        String groovyExl = "println 'hello First blood'";
        shell.evaluate(groovyExl);
  }
下面两种动态加载groovy文件

②GroovyClassLoader

//这是一个接口
public interface IFoo {
    public Object run(Object foo, Object bar);
}
//使用创建一个groovy实现IFoo
class Foo implements IFoo{
    def x
    @Override
    Object run(Object foo, Object bar) {
        println 'Hello World!'
        x = 123
        println foo * 10
        println bar
        return 'success'
    }
//当然在idea中也可以直接执行
    public static void main(String[] args) {
        Foo f = new Foo();
        f.run('test','well')
    }
}
//最关键的InvokeGroovy
public class InvokeGroovy {
    public static void main(String[] args) {
        ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();
        GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
        System.out.print("\033[35;1m");		//可以更换控制台输出语句颜色
        try {
            @SuppressWarnings("rawtypes")
//            Class groovyClass = groovyCl.parseClass(
//                    new File(InvokeGroovy.class.getResource("/production/firstGroovy/groovy/Foo.class").toURI()));

                    /** 路径问题:
                      * 注意class.geResource()以及classLoader.getResource的问题
                      * 使用上面获取路径本人在idea中还未成功,
                      * 如果有朋友解决,回我一下,我的路径获取很糟糕。。。
                      * 使用class.geResource()一直空指针
                      */
            Class groovyClass = groovyCl.parseClass(
                    new File("src/groovy/Foo.groovy"));
            IFoo foo = (IFoo) groovyClass.newInstance();
            System.out.println(foo.run(
                    new Integer(2), "More parameter..."));
            GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
            System.out.println(groovyObject.invokeMethod("run",
                    new Object[]{new Integer(2),"More parameter..."}));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

③GroovyScriptEngine

public static void main(String[] args) throws Exception {
        String[] roots = new String[]{"src/groovy/"};
        GroovyScriptEngine groovyScriptEngine = new GroovyScriptEngine(roots);
        Binding binding = new Binding();
        binding.setVariable("input", "lucas");
        groovyScriptEngine.run(" a.groovy ", binding);
        System.out.println(binding.getVariable("output"));
    }
//src/groovy下的a.groovy文件内容是单纯的groovy脚本 :   output =  "Hello, ${input}!"

初学还有很多很要踩啊!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值