據說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。