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。

发布了51 篇原创文章 · 获赞 35 · 访问量 6641

猜你喜欢

转载自blog.csdn.net/wang_lianjie/article/details/103452349
今日推荐