与小鸟一同,也是春天的开端 – 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项目的模板。
操作非常简单,只需要通过屏幕上的选项进行选择。

Spring Initializr 2018-11-02 00-13-42.png
Spring Initializr 2018-11-02 00-03-21.png

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

这个 Java 项目

Spring Initializr 2018-11-01 21-50-43.png

这次的 Kotlin 项目

Spring Initializr 2018-11-01 21-51-57.png

比较 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
广告
将在 10 秒后关闭
bannerAds