spring - 无法在 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
解决方案
@Value
注解在对象构造完成后进行处理。
该init
块是对象构造的一部分(所有构造函数都很常见)。
换句话说,您试图@Value
过早地引用注入的属性。
解决它的一种方法是以某种方式延迟 RedisServer 的构建,即:
- 对 RedisServer 使用惰性初始化。
- 用于
@PostConstruct
初始化 RedisServer 的方法。
推荐阅读
- hash - 仍然具有工作因子的确定性哈希函数(类似于 bcrypt/scrypt)
- amazon-web-services - 我可以通过“fs.s3a.stsAssumeRole.arn”中的 arn 列表吗?在 EMR 中的火花配置的情况下
- r - roxygen2 没有记录新项目
- sql - 尽管 GROUP BY,如何将行加在一起?
- swift - 在 Swift 中检查 Tip 和 PriceTxt 是否为空时不断出错
- html - 为 SVG 直升机叶片制作动画
- python - 将列转换为具有列值计数的列标题
- google-cloud-firestore - firebase storage 和 firebase cloud firestore 数据检索和存储问题到远程访问
- java - 创建自定义 RecyclerView : Header 和 Item List
- excel - 如何在excel中执行成对行差异