Groovy与java结合使用方法和小坑

介绍

网上一大片的介绍,闭包动态什么的, 我就不废话耽误大家时间啦,哈哈哈哈。

为什么要与java结合

有的时候,java代码满足不了我们随时会改变的逻辑,这时我们就可以使用groovy来动态改变代码逻辑!

它的优势就是由于代码与java本身很相像,所以几乎没有学习成本.并且在运行时,我们可以直接的改变代码,而不需要重启,或者重新打包代码.
(由于网上的groovy代码很多,所以就不多墨迹了)

IDEA中的java项目调用groovy

首先需要在maven中引入下面的依赖 (当前项目为web项目,非springboot)

<!-- groovy -->
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
	<version>2.4.7</version>
</dependency>

需要注意的是,如果是spring boot项目中,如果groovy文件若在项目目录中, 用户需要自行将groovy文件配置在maven打包目录中, 同jsp打包方式相同.

创建一个groovy文件在D盘下

/**
 * groovy 中使用java的类可以直接进行引入, 如下
 */
import java.lang.*;

/**
 * 使用groovy文件的方式来在java项目中运行groovy
 */
class Groovy{

    /**
     * 定义一个方法
     */
    def testFunction(String name){
        println "传入的人名是 ${name}"
    }
}

运行groovy的三种方式

1. 使用读取groovy文件的方式

/**
  * 使用文件的方式调用groovy
  */
 public void getGroovyFile() throws Exception {
     ClassLoader parent = getClass().getClassLoader();
     GroovyClassLoader loader = new GroovyClassLoader();

     Class groovyClass = loader.parseClass(new File("D://test.groovy"));
     //实例化 Groovy 类
     GroovyObject groovyObj = (GroovyObject) groovyClass.newInstance();
     //调用 groovyDemo 成员方法(方法名, 参数)
     System.out.println( groovyObj.invokeMethod("testFunction",new Object[]{"ncj"}));
 }

使用**groovyObj.invokeMethod(“testFunction”,new Object[]{“ncj”})**的方式运行groovy文件
参数为(方法名, 方法参数)
若方法参数为多个,就使用Object的数组进行传值即可, 若没有参数就直接传空就可以了

运行结果:

传入的人名是 ncj

2. 读取groovy字符串的方式

/**
  * 使用字符串方式运行groovy
  */
  public void useStringGroovy(){
	  //若要传入参数的话, 需要使用Binding对象
      Binding binding = new Binding();
      //值需要是json格式, type为参数类型
      //binding.setProperty("jsonString", jsonString);
      //binding.setProperty("type", type);
      //或者使用set参数
      //binding.setVariable("name", "***");  
      //参数这里笔者没有测试过具体使用方法, 大家请自行百度~~~
      groovyShell.evaluate(
              "println 'ncj'"
      );
  }

运行字符串的实际意义在于,可以将groovy代码存储到数据库中, 在需要的时候进行修改, 然后就可以改变代码的运行了!

运行结果:

ncj

3. 将groovy文件编译成class

在IDEA或者Eclipse中使用插件,将groovy’编译成class文件打包到项目中, 但是笔者认为这样并没有实现groovy的方便意义,所以不做演示!

使用groovy时遇到的几个坑

在启动时,一直都是找不到包, 发现原来是依赖没引入.
解决方法:
到maven官网上将依赖下载,手动引入.
并将groovy安装目录下的lib包中jar也进行引入.
并且需要将groovy安装目录下的lib包的依赖也进行引入
若是还是不行的话,就将依赖直接手动放到编译目录的lib文件夹下, 有的时候IDEA编译后,依赖没有放入到目标目录的lib中(应该是有的配置我没有改好,但是笔者啊!)
lib包
另外使用Notepad打开groovy文件时,有时会出现中文乱码
解决方法:
转码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不锈钢大铁锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值