将Spring Boot属性注入Kotlin Singleton /对象

时间:2018-10-12 20:35:20

标签: spring-boot kotlin singleton

我有一个Spring Boot 2项目,并且我正在使用Kotlin。我要实现的是拥有一个Kotlin单例(即对象)并注入Spring属性。

通常,我会使用构造函数注入来完成此操作,这是首选方法。但是,对于对象,不允许使用构造函数。另一个选择是将lateinit var@Value("\${my.property.name}")结合使用,尽管那样我必须初始化字段或显式设置类型。

我找不到适合的示例或类似情况,所以我很好奇这种用例需要的方法。

1 个答案:

答案 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中。