技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Kotlin で SpringBoot (2.0.0.M6) で DI した時のメモ

Java では普通に使ってたのだけど、Kotlin で試して見たメモ。
サンプルは単純に設定を読むだけのコード.

package net.white.azalea.todo.utilities.security

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component

@Component
@ConfigurationProperties(prefix = "crypt")
class CryptConfig(var secret: String = "value")

地味にハマったのが下記。

  • コンストラクタ引数に初期値を与えないと、なぜか Spring が「引数入りのコンストラクタみつかねーよ」とゴネて落ちる
    どうやら Kotlin の生成するコンストラクタをコンストラクタとして認識できない模様。
    そのため、初期値を与えてクラスフィールド化してやれば、コンストラクタインジェクションではなく、フィールドインジェクションとして辛うじて認識してくれる。
  • 上記がわかると、var も指定してやらないと「setter ねーよ」といってコケる。
  • 試した感じ、コンストラクタインジェクションを諦めて、クラス変数に @Inject するくらいが一番分かりやすい。

まだまだ kotlin での運用は微妙臭い印象。
個人的に、Kotlin で Spring はやらなくていいかなという気持ち。