欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā)

 更新時(shí)間:2017年06月14日 09:24:30   投稿:mrr  
這篇文章主要介紹了關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā),需要的朋友可以參考下

一、概述

spring官方最近宣布,將在Spring Framework 5.0版本中正式支持Kotlin語(yǔ)言。這意味著Spring Boot 2.x版本將為Kotlin提供一流的支持。

這并不會(huì)令人意外,因?yàn)镻ivotal團(tuán)隊(duì)以廣泛接納​​JVM語(yǔ)言(如Scala和Groovy)而聞名。下面我們用Spring Boot 2.x和Kotlin應(yīng)用程序。

二、搭建環(huán)境

1、環(huán)境

IntelliJ和Eclipse都對(duì)Kotlin提供了支持,可以根據(jù)自己的喜好搭建Kotlin開發(fā)環(huán)境。

2、構(gòu)建應(yīng)用

首先創(chuàng)建一個(gè)Spring Boot 2項(xiàng)目,然后修改POM配置,讓項(xiàng)目保護(hù)指定的Java版本和Kotlin版本。依賴關(guān)系如下:

<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>

注意,我們正在為Kotlin源碼文件和測(cè)試文件指定文件位置:

<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>

要編譯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>

到此為止,構(gòu)建Kotlin應(yīng)用程序所需的一切就搭建好了。注意,可以去Maven中央倉(cāng)庫(kù)尋找以下組件的最新版本:spring-boot-starter-web、kotlin-stdlib-jre8、kotlin-reflect、jackson-module-kotlin、spring-boot-starter-test。
下面設(shè)置應(yīng)用程序的上下文。

3、應(yīng)用程序上下文

下面進(jìn)入Kotlin的代碼,編寫熟悉的Spring Boot應(yīng)用程序上下文:

@SpringBootApplication
class KotlinDemoApplication
fun main(args: Array<String>) {
  SpringApplication.run(KotlinDemoApplication::class.java, *args)
}

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

我們有一個(gè)類定義了KotlinDemoApplication類。在Kotlin中,類的默認(rèn)范圍是public,所以可以省略。另外,如果一個(gè)類沒(méi)有變量、沒(méi)有函數(shù),它可以被聲明為沒(méi)有大括號(hào)。所以,從本質(zhì)上講,我們只是定義了一個(gè)類。

另外,方法或函數(shù)默認(rèn)是公開的,所以不必在這里聲明。另外,不返回任何內(nèi)容的函數(shù)不需要指定一個(gè)void返回類型。

最后,在一個(gè)類的外部定義的任何函數(shù)都是自動(dòng)靜態(tài)的。這使得這些函數(shù)可以在啟動(dòng)時(shí)得到執(zhí)行。

現(xiàn)在讓我們從根目錄運(yùn)行我們的應(yīng)用程序,使用mvn spring-boot: run。應(yīng)用程序得以啟動(dòng),應(yīng)該可以看到應(yīng)用程序在端口8080上運(yùn)行。

接下來(lái),構(gòu)建一個(gè)控制器。

4、控制器

現(xiàn)在添加一個(gè)控制器到服務(wù)中:

@RestController
class HelloController {
  @GetMapping("/hello")
  fun helloKotlin(): String {
    return "hello world"
  }
}

與標(biāo)準(zhǔn)的Spring控制器沒(méi)有太大的不同,但是肯定代碼量更精簡(jiǎn)。我們?yōu)榇丝刂破魈砑右粋€(gè)測(cè)試類和案例來(lái)驗(yàn)證我們的工作:

@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")
  }
}

這個(gè)測(cè)試顯示了Kotlin強(qiáng)大的功能之一——null安全!可以為null的Kotlin變量必須使用“?”聲明。然后,編譯器知道在訪問(wèn)該屬性之前需要進(jìn)行防御性編碼。

在我們的測(cè)試中,TestRestTemplate被定義為可空類型,每次訪問(wèn)它時(shí),我們使用null合并運(yùn)算符“?”來(lái)實(shí)現(xiàn)——如果被調(diào)用對(duì)象為空,則返回null。

這聲明了在程序中使用null,并強(qiáng)制開發(fā)人員在使用它們時(shí)編寫安全的代碼。

接下來(lái),我們添加一個(gè)服務(wù)并將其集成到我們的控制器中。

5、服務(wù)

服務(wù)很容易添加到我們的項(xiàng)目中。這樣做:

@Service
class HelloService {

  fun getHello(): String {
    return "hello service"
  }
}

這里的簡(jiǎn)單服務(wù)與單個(gè)函數(shù)返回一個(gè)String。接下來(lái),讓我們將服務(wù)連接到控制器中并使用它來(lái)返回值:

@RestController
class HelloController(val helloService: HelloService) {
  // ...

  @GetMapping("/hello-service")
  fun helloKotlinService(): String {
    return helloService.getHello()
  }
}

啊,看起來(lái)不錯(cuò)!在Kotlin中,主構(gòu)造函數(shù)可以與類聲明一起定義。我們從構(gòu)造函數(shù)中省略了@Autowired注釋,因?yàn)樗皇且欢螘r(shí)間的強(qiáng)制性的。

這些參數(shù)將自動(dòng)轉(zhuǎn)換為類中的字段。Kotlin稱它們?yōu)閷傩?。無(wú)需定義getter或setter方法,因?yàn)樗鼈兪亲詣?dòng)創(chuàng)建的。當(dāng)然,如果需要,您可以覆蓋這些默認(rèn)值。

在Kotlin中,函數(shù)中的類和變量的屬性可以使用var或val來(lái)定義。var表示可變屬性,val表示final屬性。這允許編譯器檢查非法訪問(wèn)。由于HelloService是一個(gè)單例,所以我們把它連接成一個(gè)val來(lái)防止突變。

接下來(lái),我們?yōu)榇丝刂破鞣椒ㄌ砑右粋€(gè)測(cè)試:

@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")
}

最后,我們來(lái)看看一個(gè)POJO在Kotlin中的樣子。

6、Kotlin的數(shù)據(jù)類

在Java中,我們使用PO​​JO來(lái)表示數(shù)據(jù)對(duì)象。在Kotlin中,可以更簡(jiǎn)潔地表達(dá)這種類型的對(duì)象——一個(gè)數(shù)據(jù)類。

我們寫一個(gè)數(shù)據(jù)對(duì)象返回到控制器中:

data class HelloDto(val greeting: String)

這里沒(méi)有什么竅門,自動(dòng)省略。使用data修飾符,可以獲得很多好處。此關(guān)鍵字會(huì)自動(dòng)創(chuàng)建一個(gè)equals()方法和hashcode()方法,以及toString()方法和copy()方法。所有這些方法一個(gè)修飾符就搞定了。

現(xiàn)在我們來(lái)添加一個(gè)返回新數(shù)據(jù)類的方法:

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

數(shù)據(jù)修飾符不添加默認(rèn)構(gòu)造函數(shù),這對(duì)于像Jackson這樣的庫(kù)很重要。為了支持這種類型的類,我們將jackson-module-kotlin添加到我們的POM文件中以支持編組。

最后,我們添加一個(gè)這個(gè)控制器功能的測(cè)試:

@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"))
}

三、結(jié)論

在本文中,結(jié)合Spring Boot 2.x和Kotlin語(yǔ)言,我們完成了一個(gè)Demo應(yīng)用。從示例中可以看到,Kotlin可以通過(guò)強(qiáng)制來(lái)精簡(jiǎn)代碼,保證更安全的代碼來(lái)簡(jiǎn)化和增強(qiáng)我們的應(yīng)用程序。

Kotlin還支持一些驚人的功能,如數(shù)據(jù)類、類擴(kuò)展,并與現(xiàn)有的Java代碼完全兼容。這意味著開發(fā)者可以編寫Kotlin代碼,并從Java類中調(diào)用它,反之亦然。此外,Kotlin是從一開始就建立起來(lái)的,在IDE中能得到非常好的支持。

Google和Spring都開始支持Kotlin語(yǔ)言,或許使用Kotlin的時(shí)候到了。

以上所述是小編給大家介紹的關(guān)于Spring Boot和Kotlin的聯(lián)合開發(fā),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • httpclient提交json參數(shù)的示例詳解

    httpclient提交json參數(shù)的示例詳解

    httpclient使用post提交json參數(shù),和使用表單提交區(qū)分,本文結(jié)合示例代碼講解的非常詳細(xì),補(bǔ)充介紹了HttpClient請(qǐng)求傳json參數(shù)的案例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • java使用多線程找出最大隨機(jī)數(shù)

    java使用多線程找出最大隨機(jī)數(shù)

    這篇文章主要為大家詳細(xì)介紹了java使用多線程找出最大隨機(jī)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 面試官:詳細(xì)談?wù)凧ava對(duì)象的4種引用方式

    面試官:詳細(xì)談?wù)凧ava對(duì)象的4種引用方式

    這篇文章主要給大家介紹了java面試官常會(huì)問(wèn)到的,關(guān)于Java對(duì)象的4種引用方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解

    Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解

    這篇文章主要介紹了Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解,請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向,但二者是完全不同的,所以我們今天就來(lái)盤他們的區(qū)別介紹,需要的朋友可以參考一下
    2022-07-07
  • java構(gòu)建OAuth2授權(quán)服務(wù)器

    java構(gòu)建OAuth2授權(quán)服務(wù)器

    本文主要介紹了java構(gòu)建OAuth2授權(quán)服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Java中圖片轉(zhuǎn)換為Base64的示例及注意事項(xiàng)

    Java中圖片轉(zhuǎn)換為Base64的示例及注意事項(xiàng)

    本文介紹了Base64編碼的概念及其作用,同時(shí)列舉了在實(shí)現(xiàn)圖片轉(zhuǎn)換為Base64過(guò)程中需要注意的問(wèn)題,包括文件大小、讀取異常、圖片格式、網(wǎng)絡(luò)傳輸效率以及數(shù)據(jù)安全性等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    java數(shù)據(jù)結(jié)構(gòu)之希爾排序

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)之希爾排序的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 解決使用gateway后靜態(tài)資源失效的問(wèn)題

    解決使用gateway后靜態(tài)資源失效的問(wèn)題

    這篇文章主要介紹了解決使用gateway后靜態(tài)資源失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程

    win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程

    這篇文章主要為大家詳細(xì)介紹了win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解spring注解式參數(shù)校驗(yàn)

    詳解spring注解式參數(shù)校驗(yàn)

    本篇文章主要介紹了詳解spring注解式參數(shù)校驗(yàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論