Java 注入静态场Kotlin/Spring Boot
我试图在Kotlin的静态字段中注入一个值,但没有成功 我知道Java的一种变通方法,所以在Kotlin中,这段Java代码的等价物是什么Java 注入静态场Kotlin/Spring Boot,java,spring,static,kotlin,Java,Spring,Static,Kotlin,我试图在Kotlin的静态字段中注入一个值,但没有成功 我知道Java的一种变通方法,所以在Kotlin中,这段Java代码的等价物是什么 @Component public class GlobalValue { public static String DATABASE; @Value("${mongodb.db}") public void setDatabase(String db) { DATABASE = db; } } 理论上,
@Component
public class GlobalValue {
public static String DATABASE;
@Value("${mongodb.db}")
public void setDatabase(String db) {
DATABASE = db;
}
}
理论上,以下各项应是等效的:
@Component
class GlobalValue {
companion object {
@JvmField
lateinit var DATABASE: String
}
@Value("\${mongodb.db}")
fun setDatabase(db: String) {
DATABASE = db;
}
}
我想这会有用的:
@组件
类全局值{
伴星{
@JvmStatic
lateinit var数据库:字符串
@值(\${myprop.testing2})集
}
}
但由于某种原因,可能不是,因为生成的setter是final
,或者因为它通过Companion
对象,我不知道
这在以下方面起作用:
@组件
类全局值{
伴星{
@JvmField
var数据库:String=“test”
}
@值(\${myprop.testing2})
fun setDatabase(db:String){
数据库=db
}
}
请注意\
中的@Value
——这是因为否则我们将与语言本身发生冲突,例如构造
另外,您需要指定一个默认值,
lateinit
对于@JvmField
是不可能的,正如Shadov在他们的回答中所说,lateinit对于@JvmField注释是不可能的。在这种情况下,我建议用Java编写此文件。