spring - Kotlin init 没有从 @Value 获取价值
问题描述
我想从我从 ENV 中选择的值初始化一个成员变量,但它在 init 块中不可用,因为它在对象初始化后被拾取
private lateinit var needValueHere: String
@Value("\${CLIENT_ID:NA}")
private val CLIENT_ID: String = ""
init {
this.needValueHere = this.CLIENT_ID
}
这是实际问题的简化版本。我已验证该值在成员函数中可用。
解决方案
您的对象正在通过以下方式构建:
- 创建对象(例如调用构造函数)
- 通过反射:放置依赖项(例如在@Autowired、@Value 和其他注解下填充值)。
您的 init 块是构造函数的一部分,例如所有与 Spring 相关的项目都没有在这里初始化。
如何解决此问题:
- 将属性提取到类型安全的配置中(请参阅此处的官方文档)
- 使用如下的类符号。
- 创建
private lateinit var
字段并且在 Spring 初始化完成之前不要调用它(这对于集成测试很有用,例如测试方法仅在完全预热后启动)。另一种选择 - 使用kotlin 惰性表示法。然而整个这个项目不能被命名为“好代码”。
class MyService(@Value("\${CLIENT_ID:NA}") private val needValueHere: String) {
/* */
}
推荐阅读
- ubuntu - Asp.Net Core Web API 应用程序:如何更改监听地址?
- javascript - 如何使用 PHP 从 mysql 中查询图像
- java - 多个局部变量与多个计算
- javascript - 在另一个文件 [HTML+JS] 的 html 标记中显示用户输入
- android - 某些测试人员无法使用 Android 中的 Beta 测试应用程序
- xamarin.forms - 当用户在三星 S9 上隐藏 Android 导航栏时,如何让我的 Xamarin.Forms 应用程序重绘
- pandas - 如何在熊猫中获取组内“特定”列值的平均值
- javascript - 使用 VueJS 进行表单验证时的 null 值
- python-3.x - 修复了将空列表分配给值“DNA_Sequence”的错误
- java - 类路径资源 [org/quartz/impl/jdbcjobstore/tables_h2.sql] 无法打开,因为它不存在