使用弹簧注释(如
)自动装配非基元@Autowired
lateinit var metaDataService: MetaDataService
作品。
但这不起作用:
@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Int
有错误:
原始类型不允许使用lateinit修饰符。
如何将原始属性自动装配到kotlin类中?
答案 0 :(得分:12)
@Value( “\ $ {cacheTimeSeconds}”) lateinit var cacheTimeSeconds:Int
应该是
@Value("\${cacheTimeSeconds}")
val cacheTimeSeconds: Int? = null
答案 1 :(得分:1)
我只是这样使用Number
而不是Int
...
@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Number
其他选择是做其他人之前提到的事情...
@Value("\${cacheTimeSeconds}")
var cacheTimeSeconds: Int? = null
或者您可以简单地提供一个默认值,例如...
@Value("\${cacheTimeSeconds}")
var cacheTimeSeconds: Int = 1
就我而言,我必须获得一个Boolean
类型的属性,该属性在Kotlin中是原始的,所以我的代码看起来像这样……
@Value("\${myBoolProperty}")
var myBoolProperty: Boolean = false
答案 2 :(得分:1)
您还可以在构造函数中使用@Value批注:
class Test(
@Value("\${my.value}")
private val myValue: Long
) {
//...
}
这样做的好处是您的变量是最终变量且不可为空。我也更喜欢构造函数注入。它可以简化测试。
答案 3 :(得分:0)
问题不在于注释,而是原始和lateinit
的混合,根据this question,Kotlin不允许lateinit
原语。
修复方法是更改为可空类型Int?
,或不使用lateinit
。
This TryItOnline显示了这个问题。
答案 4 :(得分:0)
Kotlin在java代码中将Int编译为int。 Spring需要非原始类型的注入,所以你应该使用Int? /布尔值? / 长? Nullable类型kotlin编译为Integer / Boolean / etc。
答案 5 :(得分:0)
尝试设置默认值
a=1
在application.properties中
package com.example.demo
import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.stereotype.Component
@SpringBootApplication
class DemoApplication
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
@Component
class Main : CommandLineRunner {
@Value("\${a}")
val a: Int = 0
override fun run(vararg args: String) {
println(a)
}
}
在代码中
1
它将打印@Component
class Main(@Value("\${a}") val a: Int) : CommandLineRunner {
override fun run(vararg args: String) {
println(a)
}
}
或使用构造器注入
Highcharts.chart('container', {
chart: {
type: 'line',
borderWidth: 1,
plotBorderWidth: 1,
marginLeft: 200
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
yAxis: {
labels: {
format: 'this is a very long label'
}
},
tooltip: {
formatter: function () {
return '<b>' + this.series.name + '</b><br/>' +
this.x + ': ' + this.y;
}
},
plotOptions: {
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
答案 6 :(得分:0)
在构造函数之外:
@Value("\${name}") lateinit var name: String
GL