Spring BootとKotlinの共同開発について


一、概要
spring公式はこのほど、Spring Fraamewark 5.0バージョンでKotlin言語を正式にサポートすると発表しました。これはSpring Boot 2.xバージョンがKotlinに一流のサポートを提供することを意味する。
これは意外ではありません。PivotalチームはScalaやGrouvyなどJVM言語を広く受け入れていることで有名です。次に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>
注意してください。Ktlinソースファイルとテストファイルの位置を指定しています。

<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
Ktlinモジュールとソースをコンパイルするには、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>
これまでKotlinアプリケーションを構築するために必要なすべてのものを構築しました。注意して、Maven中央倉庫に行って、以下のコンポーネントの最新バージョンを探してもいいです。spring-book-starter-web、kotlin-stdlib-jre 8、kotlin-reflet、jackson-module-kotlin、spring-book-starter-test。
アプリケーションのコンテキストを設定します。
3、アプリケーションのコンテキスト
以下はKotlinのコードに入り、おなじみのSpring Bootアプリケーションの文脈を作成します。

@SpringBootApplication
class KotlinDemoApplication
fun main(args: Array<String>) {
  SpringApplication.run(KotlinDemoApplication::class.java, *args)
}
おなじみの@SpringBootationの注釈が見られます。
私たちはKotlinDemoAppleクラスを定義しています。Kotlinでは、クラスのデフォルト範囲はpublicですので、省略できます。また、一つのクラスに変数がない場合、関数がない場合は、大きな括弧がないと宣言できます。だから、本質的には一つの種類を定義しただけです。
また、方法や関数はデフォルトで公開されていますので、ここで宣言する必要はありません。また、内容を返さない関数は、void返却タイプを指定する必要はありません。
最後に、クラスの外部で定義された任意の関数は自動的に静的である。これらの関数は起動時に実行できるようにします。
ルートディレクトリから私達のアプリケーションを実行して、mvn spring-boot:runを使います。アプリケーションは、ポート8080上で実行されているアプリケーションを見ることができるはずです。
次に、コントローラを構築します。
4、コントローラ
今はサービスにコントローラを追加します。

@RestController
class HelloController {
  @GetMapping("/hello")
  fun helloKotlin(): String {
    return "hello world"
  }
}
標準の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")
  }
}
このテストはKotlinの強力な機能の一つであるnull安全を示します。nullが可能なKtlin変数には「?」が必要です。宣言する。その後、コンパイラは、属性にアクセスする前に、防御コードが必要であることを知っている。
私たちのテストでは、TestRestTemplateは空きタイプとして定義されています。毎回それにアクセスする時、null結合演算子を使います。を実装します。呼び出し対象が空であれば、nullに戻ります。
これはプログラムでnullを使用して、それらを使用する際に開発者に強制的に安全なコードを作成することを宣言しています。
次に、サービスを追加して、私たちのコントローラに統合します。
5、サービス
サービスは私たちのプロジェクトに簡単に追加されます。このようにします

@Service
class HelloService {

  fun getHello(): String {
    return "hello service"
  }
}
ここでの簡単なサービスは単一の関数とStringを返します。次に、サービスをコントローラに接続し、値を返します。

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

  @GetMapping("/hello-service")
  fun helloKotlinService(): String {
    return helloService.getHello()
  }
}
あ、よさそうですね。Kotlinにおいて,主コンストラクタはクラス声明とともに定義できる。構造関数から@Autowired注釈を省略しました。それは一時的な強制ではないからです。
これらのパラメータはクラスのフィールドに自動的に変換されます。Kotlinはそれらを属性と呼びます。getterやsetterの方法を定義する必要はありません。自動的に作成されます。もちろん、必要であれば、これらの標準値を上書きできます。
Kotlinでは、関数内のクラスおよび変数の属性は、varまたはvalを使用して定義されてもよい。varは可変属性を表し、valはfinal属性を表します。これはコンパイラが不正アクセスを確認することを可能にします。ハローサービスは一例ですから、私たちはそれを一つの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")
}
最後に、POJOのKotlinの中の様子を見に来ました。
6、Kotlinのデータクラス
Javaでは、PO JOを使ってデータオブジェクトを表します。Kotlinでは、このタイプのオブジェクト、すなわちデータクラスをより簡潔に表現することができる。
データオブジェクトを書いてコントローラに戻ります。

data class HelloDto(val greeting: String)
ここにはコツがありません。自動的に省略します。data修饰符を使って、多くの利点を得ることができます。このキーワードは自動的にequals()方法とhashcode()方法を作成し、tostring()方法とcopy()方法を作成します。これらの方法は一つの修繕符で解決されます。
新しいデータクラスを返す方法を追加します。

// ...
@GetMapping("/hello-dto")
fun helloDto(): HelloDto {
  return HelloDto("Hello from the dto")
}
データ修飾子は標準のコンストラクタを追加しません。これは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"))
}
三、結論
本論文ではSpring Boot 2.xとKotlin言語を結合してDemoアプリケーションを完成した。例から、Kotlinは強制的にコードを簡素化し、より安全なコードを保証することによって、アプリケーションを簡略化し、強化することができることが分かる。
Kotlinはまた、データクラス、クラス拡張などの驚くべき機能をサポートし、既存のJavaコードと完全に互換性があります。これは、開発者がKotlinコードを作成し、Javaクラスから呼び出すことができることを意味し、逆もまた然りである。また、Kotlinは最初から構築されており、IDEでは非常に良いサポートが得られます。
GoogleとSpringはKotlin言語をサポートし始めています。もしかしたらKotlinを使う時に来ました。
以上は小编が绍介したSpring BootとKotlinの共同开発についてですが、皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。