Spring Boot 实践折腾记(15):使用Groovy

Java是在JVM上运行的最广泛使用的编程语言。不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等。其中,Groovy和Scala现在在Java社区中已经被广泛采用并大受欢迎。 本文介绍如何在Spring Boo中使用Groovy语言来编程。

Groovy

Groovy是一种基于Java的语法的基于JVM的编程语言。Groovy支持动态输入,闭包,元编程,运算符重载等等语法。除此之外,Groovy还提供了许多类似脚本语言的功能,比如,多行字符串,字符串插值,优雅的循环结构和简单的属性访问。另外,结尾分号是可选的。而这些都有足够的理帮助开发人员为了提高开发效率。

换句话说,Groovy就是一种继承了动态语言的优良特性并运行在JVM上的编程语言。由于Groovy的语法非常接近Java,所以Java开发人员很容易开始使用Groovy。 Spring Boot应用中也支持使用Groovy编程语言进行开发。

Groovy字符串

我们可以使用单引号或双引号在Groovy中创建字符串。当使用单引号时,字符串被看作为java.lang.String的一个实例,而当使用双引号时,它被会被看为groovy.lang.Gstring的一个实例,支持字符串变量值。

def name = "mickjoust"
def amount = 250
println('My name is ${name}')
println("My name is ${name}")
println("He paid \$${amount}")

运行这段代码,会打印下面的输出:

My name is ${name}
My name is mickjoust
He paid $250

由于在第一个println()语句中使用单引号,所以,$ {name}会按原样打印,而在第二个println()语句中使用双引号,则会打印变量值。如果需要打印$符号,则需要还是用转义字符\ 。并且,Groovy还支持使用三个引号(“”“或”’“)的多行字符串,如下所示:

//使用单引号
def content = '''My Name is mickjoust.
    I live in china.
    I am a software developer'''
def name = 'mickjoust'
def address = 'china'
def occupation = 'software developer'

//使用双引号
def bio = """My name is ${name}.
        I live in ${address}.
        I am a ${occupation}."""

Groovy在多行创建跨越一行的字符串时非常方便,比如,表格,带占位符的HTML模板等。

POJO属性

在Java中,一般是通过为这些属性创建私有属性和getter、setter方法来获取和创建Bean。 虽然我们可以使用IDE生成setter和getter,但还是稍微有点繁杂,特别是增删改属性后。

而在Groovy中,我们直接通过声明属性来创建bean,然后使用object.propertyName语法访问它们,而无需创建setter和getters。如下代码片段:

class Person
{
    def id
    def name
    def email
}
def p = new Person()
p.id = 1
p.name = 'mickjoust'
p.email = '[email protected]'
println("Id: ${p.id}, Name: ${p.name}, Email: ${p.email}")

在这里,我们可以看到值直接被分配给了Bean的属性,比如 p.id = 1,而不需要为id创建setter。 同样,可以使用p.id读取属性ID,而不需要获取id的getter。 因为Groovy会默认将为这些属性生成setter和getters,省去手动的get和set操作。

循环语法

除了常规while和for循环之外,Groovy还支持各种循环结构。比如,使用范围运算符(..)进行迭代,如下例子:

1、常规for用法:

for(i in 0..5) { print "${i}" }

输出:

0 1 2 3 4 5

2、使用upto()的来确定下限和上限:

0.upto(3) { print "$it " }

输出:

0 1 2 3

3、使用times()从0开始迭代:

5.times { print "$it " }

输出:

0 1 2 3 4

4、使用step()的下限和上限,来迭代并使用步长值:

0.step(10, 2) { print "$it "}

输出:

0 2 4 6 8

实战:在Spring Boot中使用Groovy

我们可以使用IDE,也可以使用在线Spring Boot应用程序生成器http://start.spring.io创建应用,并选择Groovy作为编程语言。

以Maven构建工具为例,使用插件:gmavenplus-plugin编译Groovy代码。如下代码所示。

这里要我们还要在工程里新建两个文件夹 src/main/groovy 和 src/test/groovy,分别存放源代码和测试代码,如下图:

<dependency>
    <groupId>org.codehaus.groovygroupId>
    <artifactId>groovyartifactId>
    <version>2.4.15version>
dependency>
。。。

<plugin>
    <groupId>org.codehaus.gmavenplusgroupId>
    <artifactId>gmavenplus-pluginartifactId>
    <version>1.5version>
    <executions>
        <execution>
            <goals>
                <goal>addSourcesgoal>
                <goal>addTestSourcesgoal>
                <goal>generateStubsgoal>
                <goal>compilegoal>
                <goal>testGenerateStubsgoal>
                <goal>testCompilegoal>
                <goal>removeStubsgoal>
                <goal>removeTestStubsgoal>
            goals>
        execution>
    executions>
plugin>

第一步,创建示例类Man.groovy,如下:

class Man {
    Long id
    String name
    String phone

    Man(Long id, String name, String phone) {
        this.id = id
        this.name = name
        this.phone = phone
    }
}

第二步,创建一个查询服务,包含一个接口类ManService.groovy和一个实现类ManServiceImpl.groovy,如下:

interface ManService {
    Man getInfoByName(String name)
}
@Service("manService")
class ManServiceImpl implements ManService {
    @Override
    Man getInfoByName(String name) {
        return new Man(1,name,"1233131312312")
    }
}

第三步,创建一个Rest API控制器ManController.groovy,如下:

@RestController
class ManController {

    @Autowired
    private ManService manService;

    @GetMapping("/ok")
    String home() {
        Man man = manService.getInfoByName("mickjoust")
        return "ok ==> groovy "+"name:"+man.name
    }
}

最后一步,创建Boot启动类RunAppGroovy.groovy,如下:

@SpringBootApplication
class RunAppGroovy {

    static void main(String[] args) {
        SpringApplication.run RunAppGroovy,args
    }

}

完成后,启动,成功!访问http://localhost:8080/ok,输出:

ok ==> groovy name:mickjoust

代码示例:boot-cache

小结

本文主要介绍了如何在Spring Boot中使用Groovy编程语言,通过一个简单的API示例快速实践了基于JVM下不同语言互操作的方法。

参考资源

1、Spring Boot 2 官方文档
3、Groovy还提供了许多其他功能,有兴趣的同学可以看下面的链接:

  • 使用集合
  • 闭包
  • 正则表达式
  • Traits
  • Groovy断言
  • Typing
  • 序列化与反序列化JSON
  • 解析XML
  • 元编程

要了解有关Groovy的更多信息,还可以 参阅官方文档


我的其它穿越门——持续践行,我们一路同行。
头条号:说言风语
简书ID:mickjoust
公号:说言风语

你可能感兴趣的:(springboot)