gpt4 book ai didi

spring - Kotlin 与 Spring DI : lateinit property has not been initialized

转载 作者:行者123 更新时间:2023-12-03 21:33:50 33 4
gpt4 key购买 nike

我没有在 Kotlin 中使用基于 Spring 的 setter 依赖注入(inject)来工作,因为它总是以错误消息“lateinit property api has not been initialized”终止。我可以将问题简化为以下场景:有一个接口(interface)

interface IApi {
fun retrieveContent(): String
}

实现
class Api : IApi {
override fun retrieveContent() = "Some Content"
}

我想在另一个应该进行依赖注入(inject)的类中使用该实现:

@Component
class SomeController {
@Autowired lateinit var api: IApi
fun printReceivedContent() {
print(api.retrieveContent())
}
}

但是,应用程序终止并显示上述错误消息。我的 Spring 配置如下所示:

@Configuration
open class DIConfig {
@Bean
open fun getApiInstance(): IApi = Api()
}

在主函数中,我加载了应用程序上下文并调用了方法:

fun main(args: Array<String>) {
val context = AnnotationConfigApplicationContext()
context.register(DIConfig::class.java)
context.refresh()

val controller = SomeController()
controller.printReceivedContent()
}

这里有什么问题?

最佳答案

如果您只是像那样自己调用构造函数,则不涉及 Spring。与 Java 相同,

val controller = context.getBean(SomeController::class.java)

Spring Framework 5.0 添加了 Kotlin extensions , 所以你也可以写其中之一

val controller = context.getBean<SomeController>()
val controller: SomeController = context.getBean()

关于spring - Kotlin 与 Spring DI : lateinit property has not been initialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204730/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com