Groovy 的安裝和使用教程,Groovy、Java、Spring之間的羈絆

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章