介绍
网上一大片的介绍,闭包动态什么的, 我就不废话耽误大家时间啦,哈哈哈哈。
为什么要与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也进行引入.
若是还是不行的话,就将依赖直接手动放到编译目录的lib文件夹下, 有的时候IDEA编译后,依赖没有放入到目标目录的lib中(应该是有的配置我没有改好,但是笔者懒啊!)
另外使用Notepad打开groovy文件时,有时会出现中文乱码
解决方法: