【问题标题】:Injecting Spring Boot properties into Kotlin Singleton / object将 Spring Boot 属性注入 Kotlin Singleton / object
【发布时间】:2019-03-18 02:34:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: spring-boot kotlin singleton


    【解决方案1】:

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

    object MyObject {
    
        lateinit var foo: String
    }
    
    @Configuration
    class BeanConfiguration {
    
        @Bean
        fun myObject(): MyObject {
            return MyObject.also {
                it.foo = "foo"
            }
        }
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2020-02-07
      • 2021-11-24
      相关资源
      最近更新 更多