注入静态场Kotlin / Spring Boot

时间:2018-05-28 13:21:20

标签: 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;
    }
}

2 个答案:

答案 0 :(得分:2)

认为这会奏效:

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

但由于某种原因,它不会因为生成的setter是final,或者因为它通过Companion对象,所以我不知道。

这适用于:

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

    @Value("\${myprop.testing2}")
    fun setDatabase(db: String) {
        database = db
    }
}

请注意\中的@Value - 因为否则我们会与语言本身发生冲突,例如is already there. 此外,您需要指定默认值,lateinit无法使用@JvmField

答案 1 :(得分:0)

理论上,以下内容应该是等效的:

@Component
class GlobalValue {
    companion object {
        @JvmField
        lateinit var DATABASE: String
    }

    @Value("\${mongodb.db}")
    fun setDatabase(db: String) {
        DATABASE = db;
    }
}