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

Rob*_*sch 5 singleton kotlin spring-boot

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

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

我找不到这方面的示例或类似情况,所以我很好奇这个用例所需的方法是什么。

Ada*_*old 3

从技术上讲,你可以这样做:

object MyObject {

    lateinit var foo: String
}

@Configuration
class BeanConfiguration {

    @Bean
    fun myObject(): MyObject {
        return MyObject.also {
            it.foo = "foo"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不推荐这种方法,因为它看起来像代码味道。最好使用简单的classes,因为 Spring 保证用 注释的方法@Bean只会被调用一次(如果它们没有原型范围)。

由于object不需要创建 s ,因此您可以根据需要管理其自己的生命周期,因此无需将所有内容都放在 Spring 中。