据说Groovy是更简洁的Java ,何不装一个玩玩。
Groovy官网下载
点击下载即可
下载后如下:
下载是免安装的。还有点意外。里面一堆jar,未曾细致研究。
为项目提供Groovy支持
在项目上点 Add framework support ,
之后找到Groovy ,右侧选择刚刚下载的SDK
稍等片刻之后,等IDEA为我们引入相关依赖。
我们就可以在项目里新建Groovy.Class了,如图
测试Groovy使用
我编写一个测试工具类,来测试Groovy的使用方式
package com.love.loveMe.pub.utils
class TestUtils {
public static void print(){
int sum = 0
for (i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
sum += i
}
println sum
}
}
在我项目的utiils包里写了这么个简单的函数。看里面的for语句是不是觉得很有意思呢?
任意找了controller 调用,真的可以提示到,可见和Java结合很紧密。
@RequestMapping("/test")
public String test(@RequestBody String string) {
TestUtils.print();
return string;
}
请求后发现报错
2019-12-09 09:32:55.279 INFO 16292 --- [p-nio-80-exec-6] c.l.f.b.c.e.ControllerExceptionHandler : 请求发生异常.url[/love/favorites/test],msg[Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: groovy/lang/GroovyObject]
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1053)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
搜索资料求解org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
这位小哥说是版本问题。而我用的不是gradle。
而我用main 函数调用可以执行
走下角打印出结果45,这说明。我的Groovy 代码没问题。Java调用没问题。
就是Spring加载Groovy时报的错。
于是我换了新的类加载方式
@RequestMapping("/test")
public String test(@RequestBody String string) {
GroovyObject groovyObject = null;
try {
groovyObject = (GroovyObject) GroovyClassLoaderApp.class.getClassLoader()
.loadClass("com.love.loveMe.pub.utils.TestUtils").newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 执行无参函数
groovyObject.invokeMethod("print",null);
// TestUtils.print();
return string;
}
使用GroovyObject 来加载类,报错依旧。
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
进一步搜寻资料,显示时缺这个依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.5</version>
</dependency>
加上此依赖之后问题解决。
测试Groovy互调Java
写了测试函数,改了groovy的测试函数
public static void print(){
//new 了Java的类,调了Java的方法
Parameter parameter = new Parameter()
int sum = parameter.getInt()
for (i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) {
sum += i
}
println sum
}
测试通过
hexiang
总结
本文介绍了,Groovy、Java、Spring之间的羁绊
习得本文,可为Java新增一个好兄弟Groovy。