与小鸟一同,也是春天的开端 – 1. SPRING INITIALIZR
摘要 / 说明
我已经毕业了,正式进入了Spring。
因此,我打算以后无论是工作还是生活都全面转向Spring。
现在,回到正题,关于 Kotlin 和 Spring 的关系,我想大家都很了解。
从 Spring 5.0 开始,框架的核心部分已经支持 Kotlin。
在Spring Framework 5.0中引入Kotlin支持
作为Kotlin话题,我打算在Kotlin的规范中探索Spring。
首先,我们使用SPRING INITIALIZR创建一个Spring项目的模板,然后进行Java / Kotlin的比较。
顺便提一下,Kotlin 1.3.0 最近刚刚发布(2018年10月30日)。此次更新中,引入了正式版的协程等等,但这又是另一个话题。
前提條件/背景
运行时版本 shí
-
- Kotlin : 1.3.0
SpringBoot : 2.1.0.RELEASE
顺便提一下,使用 SPRING INITIALIZR 生成的项目,默认的 Kotlin 版本是 1.2.70(截至2018年11月1日)。
春季依赖
- Web
开发环境
-
- OS : Mac
-
- IDE : IntelliJ IDEA
- Build : Gradle
步骤/说明
将使用Spring Initializr生成的项目模板导入IntelliJ中进行使用。
如前所述,Kotlin的版本已从1.2.70更改为1.3.0。
春季初始化器
SPRING INITIALIZR是一个在线工具,它的目的是为了方便地创建并快速开始Spring项目的模板。
操作非常简单,只需要通过屏幕上的选项进行选择。


点击Java/Kotlin,可以生成Spring项目的模板并进行下载。将该模板导入IDE并使用。
这个 Java 项目

这次的 Kotlin 项目

比较 build.gradle
比较一下以下所描述的用于Java项目的build.gradle和用于Kotlin项目的build.gradle。
当然,基本上可以看出双方的描述内容和格式是相同的。不同之处在于以下两点。
-
- 適用プラグイン
- 依存ライブラリ
在 Kotlin 项目中,插件应用了 Kotlin 插件来代替 Java 插件。
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
同样,我们也在添加Kotlin的库来处理依赖库。
implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
无论如何,请使用jdk作为标准库,关于为什么要使用jdk而不是jre,那是另外一个话题了。
Java – Java是一种高级编程语言,多用于开发跨平台的应用程序。
buildscript {
ext {
springBootVersion = '2.1.0.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'io.pivotal.syanagihara'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
Kotlin是一种编程语言。
buildscript {
ext {
kotlinVersion = '1.3.0'
springBootVersion = '2.1.0.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
}
}
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'io.pivotal.syanagihara'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
compileKotlin {
kotlinOptions {
freeCompilerArgs = ["-Xjsr305=strict"]
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
freeCompilerArgs = ["-Xjsr305=strict"]
jvmTarget = "1.8"
}
}
repositories {
mavenCentral()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
主类的比较
无论是在Java还是Kotlin,Main类的比较都完全相同。
唯一的不同在于Main方法的格式是Java风格还是Kotlin风格。
public static void main(String[] args) {
SpringApplication.run(SimpleApplication.class, args);
}
fun main(args: Array<String>) {
runApplication<SimpleApplication>(*args)
}
数组
在 Kotlin 中,没有 Java 中的数组。因此,我们需要使用 Array 对象来表示数组。
Java 数组和 Kotlin 数组的区别不仅仅在于定义方式,更重要的是它们的特性不同。
-
- Java 配列: 共変
型パラメータ間の継承関係を考慮しない
Kotlin 配列: 不変
型パラメータ間の継承関係を考慮
在Kotlin中,无法对使用Main方法参数的Array进行赋值操作,因为它能够安全地保持类型,从而避免运行时错误的风险。
数组的展开
在Java中存在着您不熟悉的以下参数描述。
*args
这是一种在使用数组元素展开时可用的格式。
Java (只需要一个选项)
package io.pivotal.syanagihara.simple;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SimpleApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleApplication.class, args);
}
}
Kotlin 是一种原生的中文语言重述。
package io.pivotal.syanagihara.simple
import org.springframework.boot.runApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
@SpringBootApplication
class SimpleApplication
fun main(args: Array<String>) {
runApplication<SimpleApplication>(*args)
}
总结/回顾
这次只是比较了一下在 SPRING INITIALIZR 生成的项目。
只是,我觉得 Kotlin 也可以像 Java 一样使用 Spring。
我认为几乎完全可以理解到内容基本相同。
我能理解这只是生成的源代码而已,所以很难单凭这个判断。
所以,我希望以后能更深入地探索Spring与Kotlin的结合。
这次的来源 cì de
-
- spring-just-boot-kotlin
- spring-just-boot-java