首页 > 解决方案 > 无法在 Kotlin 中使用 @Value 注释的默认值初始化属性

问题描述

我的 Redis 配置类中有一个包含 Redis 端口的属性。

@Value("\${redis.port:63799}")
lateinit var port: Integer

init {
        this.redisServer = RedisServer(port.toInt())
    }

当我运行我的代码时,我得到了这个错误:

kotlin.UninitializedPropertyAccessException: lateinit property port has not been initialized

标签: springkotlin

解决方案


@Value注解在对象构造完成后进行处理。

init块是对象构造的一部分(所有构造函数都很常见)。

换句话说,您试图@Value过早地引用注入的属性。

解决它的一种方法是以某种方式延迟 RedisServer 的构建,即:

  1. 对 RedisServer 使用惰性初始化。
  2. 用于@PostConstruct初始化 RedisServer 的方法。

推荐阅读