@Autowired in kotlin과 같은 봄 주석 사용법
코틀린에서 팔로우 같은 걸 할 수 있을까요?
@Autowired
internal var mongoTemplate: MongoTemplate
@Autowired
internal var solrClient: SolrClient
봄에 의존성 주입을 수행하기 위해 권장되는 접근 방식은 컨스트럭터 주입입니다.
@Component
class YourBean(
private val mongoTemplate: MongoTemplate,
private val solrClient: SolrClient
) {
// code
}
봄 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에서 지원됩니다.첫 번째 gotcha는 primary constructor에 대한 주석으로 명시적인 'constructor' 키워드가 필요합니다.
https://kotlinlang.org/docs/reference/annotations.html 에서
클래스의 기본 생성자에 주석을 달아야 하는 경우 생성자 선언에 생성자 키워드를 추가하고 그 앞에 주석을 추가해야 합니다.
class Foo @Inject constructor(dependency: MyDependency) {
// ...
}
생성자를 통해 종속성을 자동 연결할 수도 있습니다.종속성에 주석을 다는 것을 잊지 마십시오.@Configuration, @Component, @Service
기타
import org.springframework.stereotype.Component
@Component
class Foo (private val dependency: MyDependency) {
//...
}
이런 거죠.
@Component class Girl( @Autowired var outfit: Outfit)
속성 주입을 원하지만 원하지 않는 경우lateinit var
다음은 속성 대리인을 사용한 솔루션입니다.
private lateinit var ctx: ApplicationContext
@Component
private class CtxVarConfigurer : ApplicationContextAware {
override fun setApplicationContext(context: ApplicationContext) {
ctx = context
}
}
inline fun <reified T : Any> autowired(name: String? = null) = Autowired(T::class.java, name)
class Autowired<T : Any>(private val javaType: Class<T>, private val name: String?) {
private val value by lazy {
if (name == null) {
ctx.getBean(javaType)
} else {
ctx.getBean(name, javaType)
}
}
operator fun getValue(thisRef: Any?, property: KProperty<*>): T = value
}
그러면 훨씬 더 좋은 것을 사용할 수 있습니다.by
위임 구문:
@Service
class MyService {
private val serviceToBeInjected: ServiceA by autowired()
private val ambiguousBean: AmbiguousService by autowired("qualifier")
}
언급URL : https://stackoverflow.com/questions/35479631/how-to-use-spring-annotations-like-autowired-in-kotlin
'sourcecode' 카테고리의 다른 글
커스텀 PUBLIC_URL로 create-react-app 프로젝트를 빌드할 수 없습니다. (0) | 2023.02.15 |
---|---|
최대 날짜로 레코드 가져오기 (0) | 2023.02.15 |
도커 컨테이너의 WordPress(연락처 양식)에서 이메일을 보내는 방법 (0) | 2023.02.11 |
WP REST API - 게시 요청 시 id 대신 카테고리 이름 가져오기 (0) | 2023.02.11 |
typeScript에서 jQuery를 사용하는 방법 (0) | 2023.02.11 |