1. ホーム
  2. spring

[解決済み] kotlinで@Autowiredのようなspringアノテーションを使用する方法とは?

2022-11-23 19:23:29

質問

Kotlinで以下のようなことは可能でしょうか?

@Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient

どのように解決するのですか?

Springで依存性注入を行うには、コンストラクタ注入を行うのがよいでしょう。

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

Spring 4.3以前のコンストラクタは、明示的なアノテーションとして Autowired :

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

稀なケースとして、フィールドインジェクションを使いたい場合があるかもしれません。 lateinit :

@Component
class YourBean {

    @Autowired
    private lateinit var mongoTemplate: MongoTemplate

    @Autowired
    private lateinit var solrClient: SolrClient
}

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

リンク集です。

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