在 Kotlin 中初始化具有对象内部属性的组件

Intiliaze a component with properties inside an object in Kotlin

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

@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)
        //.....
    }
}

您应该使用 @Component 注释将 MdsCacheValidationUtil 变成 Spring 托管 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”。