我有一个Spring Boot 2项目,并且我正在使用Kotlin。我要实现的是拥有一个Kotlin单例(即对象)并注入Spring属性。
通常,我会使用构造函数注入来完成此操作,这是首选方法。但是,对于对象,不允许使用构造函数。另一个选择是将lateinit var
与@Value("\${my.property.name}")
结合使用,尽管那样我必须初始化字段或显式设置类型。
我找不到适合的示例或类似情况,所以我很好奇这种用例需要的方法。
答案 0 :(得分:0)
从技术上讲,您可以这样做:
object MyObject {
lateinit var foo: String
}
@Configuration
class BeanConfiguration {
@Bean
fun myObject(): MyObject {
return MyObject.also {
it.foo = "foo"
}
}
}
但是我不推荐这种方法,因为它看起来像是代码的味道。最好使用简单的class
,因为Spring保证用@Bean
注释的方法只会被调用一次(如果它们没有原型作用域)。
由于不需要创建object
,因此可以根据需要管理自己的生命周期,因此不需要将所有内容都放在Spring中。