【问题标题】:lateinit property has not been initialized when using @Autowired使用@Autowired 时,lateinit 属性尚未初始化
【发布时间】:2021-06-23 05:34:10
【问题描述】:

我正在使用@Bean 和@Autowired

@Component
class ConfigurationServiceInvoker()  {

    fun getRules(request: RulesRequest): RulesResponse {
        return runBlocking { stub.geRules(request) }
    }
}
@Component
object InvokerConfiguration {
    
    @Bean
    fun getConfigurationServiceInvoker(): ConfigurationServiceInvoker {
        return ConfigurationServiceInvoker()
    }
}

当我调用 getRules() 函数时出现错误“lateinit property configurationServiceInvoker has not been initialized”,如何解决这个问题?

@Autowired
private lateinit var configurationServiceInvoker: ConfigurationServiceInvoker

val response = configurationServiceInvoker.getRules()

【问题讨论】:

    标签: spring-boot kotlin


    【解决方案1】:

    configurationServiceInvoker.getRules() 在对象的构造过程中被调用。像处理 @Autowired 这样的运行时注释处理器发生在对象被构造之后。考虑使用@PostConstruct 来初始化响应值,如下所示:

    @Autowired
    private lateinit var configurationServiceInvoker: ConfigurationServiceInvoker
    
    lateinit var response;
    
    @PostConstruct
    fun postConstruct() {
        response = configurationServiceInvoker.getRules()
    }
    

    【讨论】:

    • 我不太明白,我需要把@PostConstruct 放在哪里?
    • 添加了使用示例。你可以谷歌@PostConstruct 获取大量使用示例
    猜你喜欢
    • 2017-12-25
    • 2017-03-03
    • 1970-01-01
    • 2023-03-25
    • 2020-12-31
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多