基于Spring Boot和Kotlin的联合开发

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/72979648 基于Spring Boot和Kotlin的联合开发版权声明:本文为博主chszs的原创文章,未获得博主授权均不能转载,否则视为侵权。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/72979648

基于Spring Boot和Kotlin的联合开发

  • 版权声明:本文为博主chszs的原创文章,未获得博主授权均不能转载,否则视为侵权。

一、概述

Spring官方最近宣布,将在Spring Framework 5.0版本中正式支持Kotlin语言。这意味着Spring Boot 2.x版本将为Kotlin提供一流的支持。

这并不会令人意外,因为Pivotal团队以广泛接纳​​JVM语言(如Scala和Groovy)而闻名。下面我们用Spring Boot 2.x和Kotlin应用程序。

二、搭建环境

1、环境

IntelliJ和Eclipse都对Kotlin提供了支持,可以根据自己的喜好搭建Kotlin开发环境。

2、构建应用

首先创建一个Spring Boot 2项目,然后修改POM配置,让项目保护指定的Java版本和Kotlin版本。依赖关系如下:

<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib-jre8</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-reflect</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>1.1.2</version>
</dependency>
AI 代码解读

注意,我们正在为Kotlin源码文件和测试文件指定文件位置:

<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
AI 代码解读

要编译Kotlin模块和源码,需要使用kotlin-maven-plugin插件:

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>1.1.2</version>
    <configuration>
        <compilerPlugins>
            <plugin>spring</plugin>
        </compilerPlugins>
        <jvmTarget>1.8</jvmTarget>
    </configuration>
    <executions>
        <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-allopen</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
</plugin>
AI 代码解读

到此为止,构建Kotlin应用程序所需的一切就搭建好了。注意,可以去Maven中央仓库寻找以下组件的最新版本:spring-boot-starter-web、kotlin-stdlib-jre8、kotlin-reflect、jackson-module-kotlin、spring-boot-starter-test。
下面设置应用程序的上下文。

3、应用程序上下文

下面进入Kotlin的代码,编写熟悉的Spring Boot应用程序上下文:

@SpringBootApplication
class KotlinDemoApplication

fun main(args: Array<String>) {
    SpringApplication.run(KotlinDemoApplication::class.java, *args)
}
AI 代码解读

可以看到熟悉的@SpringBootApplication注解。

我们有一个类定义了KotlinDemoApplication类。在Kotlin中,类的默认范围是public,所以可以省略。另外,如果一个类没有变量、没有函数,它可以被声明为没有大括号。所以,从本质上讲,我们只是定义了一个类。

另外,方法或函数默认是公开的,所以不必在这里声明。另外,不返回任何内容的函数不需要指定一个void返回类型。

最后,在一个类的外部定义的任何函数都是自动静态的。这使得这些函数可以在启动时得到执行。

现在让我们从根目录运行我们的应用程序,使用mvn spring-boot: run。应用程序得以启动,应该可以看到应用程序在端口8080上运行。

接下来,构建一个控制器。

4、控制器

现在添加一个控制器到服务中:

@RestController
class HelloController {
    @GetMapping("/hello")
    fun helloKotlin(): String {
        return "hello world"
    }
}
AI 代码解读

与标准的Spring控制器没有太大的不同,但是肯定代码量更精简。我们为此控制器添加一个测试类和案例来验证我们的工作:

@RunWith(SpringRunner::class)
@SpringBootTest(classes = arrayOf(KotlinDemoApplication::class), 
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class KotlinDemoApplicationTests {

    @Autowired
    lateinit var testRestTemplate: TestRestTemplate

    @Test
    fun whenCalled_shouldReturnHello() {
        val result = testRestTemplate
        // ...
        .getForEntity("/hello", String::class.java)

        assertNotNull(result)
        assertEquals(result?.statusCode, HttpStatus.OK)
        assertEquals(result?.body, "hello world")
    }
}
AI 代码解读

这个测试显示了Kotlin强大的功能之一——null安全!可以为null的Kotlin变量必须使用“?”声明。然后,编译器知道在访问该属性之前需要进行防御性编码。

在我们的测试中,TestRestTemplate被定义为可空类型,每次访问它时,我们使用null合并运算符“?”来实现——如果被调用对象为空,则返回null。

这声明了在程序中使用null,并强制开发人员在使用它们时编写安全的代码。

接下来,我们添加一个服务并将其集成到我们的控制器中。

5、服务

服务很容易添加到我们的项目中。这样做:

@Service
class HelloService {

    fun getHello(): String {
        return "hello service"
    }
}
AI 代码解读

这里的简单服务与单个函数返回一个String。接下来,让我们将服务连接到控制器中并使用它来返回值:

@RestController
class HelloController(val helloService: HelloService) {

    // ...

    @GetMapping("/hello-service")
    fun helloKotlinService(): String {
        return helloService.getHello()
    }
}
AI 代码解读

啊,看起来不错!在Kotlin中,主构造函数可以与类声明一起定义。我们从构造函数中省略了@Autowired注释,因为它不是一段时间的强制性的。

这些参数将自动转换为类中的字段。Kotlin称它们为属性。无需定义getter或setter方法,因为它们是自动创建的。当然,如果需要,您可以覆盖这些默认值。

在Kotlin中,函数中的类和变量的属性可以使用var或val来定义。var表示可变属性,val表示final属性。这允许编译器检查非法访问。由于HelloService是一个单例,所以我们把它连接成一个val来防止突变。

接下来,我们为此控制器方法添加一个测试:

@Test
fun whenCalled_shouldReturnHelloService() {
    var result = testRestTemplate
    // ...
    .getForEntity("/hello-service", String::class.java)

    assertNotNull(result)
    assertEquals(result?.statusCode, HttpStatus.OK)
    assertEquals(result?.body, "hello service")
}
AI 代码解读

最后,我们来看看一个POJO在Kotlin中的样子。

6、Kotlin的数据类

在Java中,我们使用PO​​JO来表示数据对象。在Kotlin中,可以更简洁地表达这种类型的对象——一个数据类。
我们写一个数据对象返回到控制器中:

data class HelloDto(val greeting: String)
AI 代码解读

这里没有什么窍门,自动省略。使用data修饰符,可以获得很多好处。此关键字会自动创建一个equals()方法和hashcode()方法,以及toString()方法和copy()方法。所有这些方法一个修饰符就搞定了。

现在我们来添加一个返回新数据类的方法:

// ...
@GetMapping("/hello-dto")
fun helloDto(): HelloDto {
    return HelloDto("Hello from the dto")
}
AI 代码解读

数据修饰符不添加默认构造函数,这对于像Jackson这样的库很重要。为了支持这种类型的类,我们将jackson-module-kotlin添加到我们的POM文件中以支持编组。

最后,我们添加一个这个控制器功能的测试:

@Test
fun whenCalled_shoudlReturnJSON() {
    val result = testRestTemplate
    // ...
    .getForEntity("/hello-dto", HelloDto::class.java)

    assertNotNull(result)
    assertEquals(result?.statusCode, HttpStatus.OK)
    assertEquals(result?.body, HelloDto("Hello from the dto"))
}
AI 代码解读

三、结论

在本文中,结合Spring Boot 2.x和Kotlin语言,我们完成了一个Demo应用。从示例中可以看到,Kotlin可以通过强制来精简代码,保证更安全的代码来简化和增强我们的应用程序。

Kotlin还支持一些惊人的功能,如数据类、类扩展,并与现有的Java代码完全兼容。这意味着开发者可以编写Kotlin代码,并从Java类中调用它,反之亦然。此外,Kotlin是从一开始就建立起来的,在IDE中能得到非常好的支持。

Google和Spring都开始支持Kotlin语言,或许使用Kotlin的时候到了。

chszs
+关注
目录
打赏
0
0
0
0
1098
分享
相关文章
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
389 17
Spring Boot 两种部署到服务器的方式
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
53 6
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
1881 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
101 0
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
108 7
|
3月前
|
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
77 11
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
89 5
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
Spring Boot 开发中的常见失误
本文深入分析了Spring Boot开发中常见的失误,包括不当使用@Component、@ResponseBody、@Autowired注解,以及不良的异常处理和日志记录实践,提供了有效的规避策略,帮助开发者提升代码质量和系统性能。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等