注入静态字段 Kotlin/Spring Boot

Már*_*ial 3 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*dov 5

以为这会奏效:

@Component
class GlobalValue {
    companion object {
        @JvmStatic
        lateinit var database: String
        @Value("\${myprop.testing2}") set
    }
}
Run Code Online (Sandbox Code Playgroud)

但它没有,出于某种原因,可能是因为生成的 setter 是final,或者因为它通过Companion对象,我不知道。

这有效:

@Component
class GlobalValue {
    companion object {
        @JvmField
        var database: String = "test"
    }

    @Value("\${myprop.testing2}")
    fun setDatabase(db: String) {
        database = db
    }
}
Run Code Online (Sandbox Code Playgroud)

注意\in @Value- 这是因为否则我们会与语言本身发生冲突,这种结构已经存在。 此外,您需要指定一个默认值,这lateinit是不可能的@JvmField