fku*_*rth 15 spring kotlin kotlin-interop kotlin-null-safety
使用弹簧注释自动装配非基元
@Autowired
lateinit var metaDataService: MetaDataService
Run Code Online (Sandbox Code Playgroud)
作品.
但这不起作用:
@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Int
Run Code Online (Sandbox Code Playgroud)
有错误:
原始类型不允许使用lateinit修饰符.
如何将原始属性自动装配到kotlin类中?
ans*_*tue 26
您还可以在构造函数中使用 @Value 注释:
class Test(
@Value("\${my.value}")
private val myValue: Long
) {
//...
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您的变量是 final 且不可为空的。我也更喜欢构造函数注入。它可以使测试更容易。
qwe*_*ukg 14
@Value("\ $ {cacheTimeSeconds}")lateinit var cacheTimeSeconds:Int
应该
@Value("\${cacheTimeSeconds}")
val cacheTimeSeconds: Int? = null
Run Code Online (Sandbox Code Playgroud)
小智 7
我只是使用Number而不是Int这样......
@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Number
Run Code Online (Sandbox Code Playgroud)
其他选择是做其他人之前提到的......
@Value("\${cacheTimeSeconds}")
var cacheTimeSeconds: Int? = null
Run Code Online (Sandbox Code Playgroud)
或者您可以简单地提供一个默认值,例如...
@Value("\${cacheTimeSeconds}")
var cacheTimeSeconds: Int = 1
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我必须获得一个Boolean在 Kotlin 中是原始类型的属性,所以我的代码看起来像这样......
@Value("\${myBoolProperty}")
var myBoolProperty: Boolean = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10039 次 |
| 最近记录: |