在 Kotlin 中使用对象内部的属性初始化组件

Posted

技术标签:

【中文标题】在 Kotlin 中使用对象内部的属性初始化组件【英文标题】:Intiliaze a component with properties inside an object in Kotlin 【发布时间】:2021-11-01 09:31:40 【问题描述】:

我有一个用于存储属性的数据类

@Component
@ConfigurationProperties(prefix = "cache")
data class CacheProperties(
    var enable: Boolean = false,
    var CacheName: String = "",
)

我有一个需要使用这些属性的对象。 Kotlin object 不支持 @Autowired 注解。在这种情况下如何初始化属性?

object MdsCacheValidationUtil 

    //need to inject cache properties here

    private val log: Logger = LoggerFactory.getLogger(this::class.java)

    fun validateLastUpdateTime(lastUpdateTime: Instant?) 
        println(cache.CacheName)
        //.....
    

【问题讨论】:

【参考方案1】:

您应该使用@Component 注解将MdsCacheValidationUtil 转换为Spring Managed Bean,如下所示:

@Component
class MdsCacheValidationUtil(cacheProperties: CacheProperties) 

    private val log: Logger = LoggerFactory.getLogger(this::class.java)

    fun validateLastUpdateTime(lastUpdateTime: Instant?) 
        println(cacheProperties.CacheName)
        //.....
    

另外,我相信您在CacheProperties 中有错字。我猜你想写cacheName 而不是CacheName。注意小写的“c”。

【讨论】:

不客气!如果它解决了您的问题,您可以接受它作为您问题的答案,以便遇到此问题的其他人了解解决方案可能是什么;)

以上是关于在 Kotlin 中使用对象内部的属性初始化组件的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin类和对象

使用 Kotlin 在 android 中声明 UI 组件的最佳方法是啥?

声明为不可为空的 Kotlin 属性即使具有初始化值也可以为空

kotlin-代理属性(by)

Kotlin学习与实践 构造方法

Kotlin 初学者类和对象