【发布时间】:2019-03-05 08:31:08
【问题描述】:
@Value("\${datasource.host}")
private val host: String = ""
我在 KOTLIN 中编写了以下代码,它运行良好。
我不明白host 是如何注入host 的。
据我所知,不应注入该值,因为 host 变量是 val。
这段代码是如何工作的?
【问题讨论】:
标签: spring-boot kotlin
@Value("\${datasource.host}")
private val host: String = ""
我在 KOTLIN 中编写了以下代码,它运行良好。
我不明白host 是如何注入host 的。
据我所知,不应注入该值,因为 host 变量是 val。
这段代码是如何工作的?
【问题讨论】:
标签: spring-boot kotlin
简短回答:春天很神奇!
对于 Kotlin 属性,val 并不一定意味着该属性是常量。 (这里它不完全等同于 Java final。)它只是意味着有一个 get() 方法,但没有 set() 方法。
这为价值以其他方式改变留下了可能性。 (例如,该属性可能有一个返回不同值的自定义 getter。)
我不太清楚 Spring 是如何发挥它的魔力的。它可能能够直接设置属性的支持字段,或者它可以创建一个隐藏的子类。无论如何,它完全能够设置val 属性。 (您也可以在 Hibernate 中看到这一点。)
【讨论】:
val可以改成反射吗?参考)stackoverflow.com/questions/17319122/…