[spring] Kotlin에서 @Autowired와 같은 스프링 주석을 사용하는 방법은 무엇입니까?

Kotlin에서 다음과 같은 작업을 수행 할 수 있습니까?

@Autowired
internal var mongoTemplate: MongoTemplate

@Autowired
internal var solrClient: SolrClient



답변

Spring에서 Dependency Injection을 수행하는 권장 방법은 생성자 주입입니다.

@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
}

생성자 주입은 빈 생성시 모든 종속성을 확인하고 주입 된 모든 필드는 val . 반면에 lateinit 주입 된 필드는 일 수 있으며 var런타임 오버 헤드가 거의 없습니다. 생성자로 클래스를 테스트하기 위해 리플렉션이 필요하지 않습니다.

연결:

  1. lateinit에 대한 문서
  2. 생성자에 대한 문서
  3. Kotlin으로 Spring Boot 애플리케이션 개발


답변

예, 자바 주석은 대부분 자바 에서처럼 Kotlin에서 지원됩니다. 한 가지 문제는 기본 생성자에 대한 주석에 명시적인 ‘constructor’키워드가 필요하다는 것입니다.

에서 https://kotlinlang.org/docs/reference/annotations.html

클래스의 기본 생성자에 주석을 추가해야하는 경우 생성자 선언에 생성자 키워드를 추가하고 그 앞에 주석을 추가해야합니다.

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


답변

생성자를 통해 종속성을 자동으로 연결할 수도 있습니다. @Configuration, @Component, @Serviceetc로 종속성에 주석을다는 것을 잊지 마십시오.

import org.springframework.stereotype.Component

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


답변

그렇게

@Component class Girl( @Autowired var outfit: Outfit)


답변