kotlinを用いてspring bootアプリケーションを開発する


1.Kotlinのメリット
  • Kotlinは静的タイプの言語ですが、巧みなタイプ推定のため、動的言語と同じように短く表現力に富んだコードを書くことができ、純粋なJavaプロジェクト
  • に近い表現ができます.
  • プロパティ(properties)は
  • をサポートします.
  • 他の言語と比較して比較的軽量な標準ライブラリ
  • 簡単学習:Java開発者は大部分の言語
  • を迅速に理解できます.
  • Javaと相互運用可能
  • Android開発(すでにグーグルアンドロイド公式指定開発言語となっている)
  • に適している
  • 内蔵の可変性と空のポインタの安全なサポート
  • コードは読みやすく、効率的に
  • を記述します.
  • では、クラスを継承する必要がなく、既存のライブラリを拡張したり、Decorator
  • のような設計モードを使用したりすることができます.
  • 文末にセミコロンは必要ありません.

  • Kotlin disget 2015のブログでは、Kotlinを知るのに役立つ多くの情報を見つけることができます.また、kotlinでオンラインでKotlin言語を練習することもできます.
    2.Spring Boot+Kotlinプロジェクト
    Kotlinでは、非常に短い定義(data class)を使用してエンティティークラスを宣言できます.パラメータでは、デフォルト値を指定できます.パラメータタイプは、パラメータの後に与えられます.
    @Entity
    data class Customer(
    	var firstName: String = "",
    	var lastName: String = "",
    	@Id @GeneratedValue(strategy = GenerationType.AUTO)
    	var id: Long = 0
    )
    
    data classの後に続くのは、一般的なクラスのカッコではなく、カッコであることに注意してください.
    @RestController
    class CustomerController (val repository:CustomerRepository) {
    
    	@GetMapping("/")
    	fun findAll() = repository.findAll()
    
    	@GetMapping("/{name}")
    	fun findByLastName(@PathVariable name:String)
    		= repository.findByLastName(name)
    }
    
  • には、Spring MVC REST controllerが構造関数レベルの注入方式を採用しており、kotlinのデフォルトクラスはpublic(javaはprotect)として表示されるため、特に指定する必要はありません.
  • 関数が単文式を返し、括弧を書かずに直接関数=に式を譲ることができる場合、戻りタイプはKotlinによって自動的に推定されます.
  • interface CustomerRepository : CrudRepository<Customer, Long> {
    	fun findByLastName(name: String): List<Customer>
    }
    
    Spring Data repositoryを定義するのも簡単です.
    @SpringBootApplication
    open class Application {
    
    	@Bean
    	open fun init(repository: CustomerRepository) = CommandLineRunner {
    		repository.save(Customer("Jack", "Bauer"))
    		repository.save(Customer("Chloe", "O'Brian"))
    		repository.save(Customer("Kim", "Bauer"))
    		repository.save(Customer("David", "Palmer"))
    		repository.save(Customer("Michelle", "Dessler"))
    	}
    }
    
    fun main(args: Array<String>) {
    	SpringApplication.run(Application::class.java, *args)
    }
    
  • Javaでは、関数はクラスに依存する必要がありますが、Kotlinではトップレベルの関数をサポートできます.したがって、上記のようにSpring Bootエントリクラスを宣言することができます.
  • Kotlinではクラスとメソッドがfinalとしてデフォルト設定されており、継承/上書きは許可されていません.必要に応じてopen修飾子を追加します.

  • 3.追加の説明
  • 配列注記属性はJavaのように
    // java
    @RequestMapping(method = RequestMethod.GET)
    
    // kotlin
    @RequestMapping(method = arrayOf(RequestMethod.GET))
    
    ではありませんがkotlin 1.1改善されたので、このissueを見ることができます.
  • 属性注入問題
    var name = "cmx";
    var hello = "My name is ${name}";
    @Value("\${some.property}")
    
    kotlinでは、$ドル記号が文字列補間に使用されるため、@Value属性注入の場合、$の前に\を追加してエスケープするか、@ConfigurationPropertiesの代わりに使用する必要があります.
  • Jacksonを使用する問題Jacksonを使用している場合は、com.fasterxml.jackson.module:jackson-module-kotlinの依存関係を追加して、デフォルトのコンストラクタまたはKotlinセットのないデータクラスを処理できるようにする必要があります.Spring Framework 4.3+に自動登録されています.

  • 4. demo
    github:mongo+kotlinケース