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
런타임 오버 헤드가 거의 없습니다. 생성자로 클래스를 테스트하기 위해 리플렉션이 필요하지 않습니다.
연결:
답변
예, 자바 주석은 대부분 자바 에서처럼 Kotlin에서 지원됩니다. 한 가지 문제는 기본 생성자에 대한 주석에 명시적인 ‘constructor’키워드가 필요하다는 것입니다.
에서 https://kotlinlang.org/docs/reference/annotations.html
클래스의 기본 생성자에 주석을 추가해야하는 경우 생성자 선언에 생성자 키워드를 추가하고 그 앞에 주석을 추가해야합니다.
class Foo @Inject constructor(dependency: MyDependency) {
// ...
}
답변
생성자를 통해 종속성을 자동으로 연결할 수도 있습니다. @Configuration, @Component, @Service
etc로 종속성에 주석을다는 것을 잊지 마십시오.
import org.springframework.stereotype.Component
@Component
class Foo (private val dependency: MyDependency) {
//...
}
답변
그렇게
@Component class Girl( @Autowired var outfit: Outfit)