web-dev-qa-db-ja.com

kotlinで@Autowiredのようなスプリングアノテーションを使用する方法は?

Kotlinでフォローするようなことは可能ですか?

@Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient
56
eendroroy

確かにこれが可能であるため、オプションはほとんどありません。注釈付きコンストラクターをお勧めしますが、lateinitも機能し、場合によっては役に立つかもしれません。

Lateinit:

@Component
class YourBean {

    @Autowired
    lateinit var mongoTemplate: MongoTemplate

    @Autowired
    lateinit var solrClient: SolrClient
}

コンストラクタ:

@Component
class YourBean @Autowired constructor(
    private val mongoTemplate: MongoTemplate, 
    private val solrClient: SolrClient
) {
  // code
}

Spring 4.3のコンストラクター:

@Component
class YourBean(
    private val mongoTemplate: MongoTemplate, 
    private val solrClient: SolrClient
) {
  // code
}

コンストラクターのバージョンは、Bean作成時のすべての依存関係とすべての挿入フィールドをチェックします。val、valid、lateinit挿入フィールドはvarのみで、実行時のフットプリントはほとんどありません。そして、コンストラクターでクラスをテストするために、リフレクションは必要ありません。

リンク:

  1. lateinitのドキュメント
  2. コンストラクタに関するドキュメント
  3. Kotlinを使用したSpring Bootアプリケーションの開発
124
Ruslan

はい、Java注釈は、ほとんどJavaの場合と同様にKotlinでサポートされています。 1つの落とし穴は、明示的な 'constructor'キーワードが必要なプライマリコンストラクターの注釈です。

から https://kotlinlang.org/docs/reference/annotations.html

クラスのプライマリコンストラクターに注釈を付ける必要がある場合、コンストラクター宣言にコンストラクターキーワードを追加し、その前に注釈を追加する必要があります。

class Foo @Inject constructor(dependency: MyDependency) {
  // ...
}
5
Mike Buhot

コンストラクターを介して依存関係を自動配線することもできます。依存関係に@Configuration, @Component, @Serviceなどの注釈を付けることを忘れないでください

import org.springframework.stereotype.Component

@Component
class Foo (private val dependency: MyDependency) {
    //...
}
0
Mr.Turtle