У меня есть проект Spring Boot 2, и я использую Kotlin. Я хочу достичь сингла Kotlin (т.е. объект) и внедрить свойства Spring.
Обычно я бы делал это с помощью внедрения конструктора, что является предпочтительным способом. Однако для объектов конструкторы не допускаются. Другой вариант - использовать lateinit var в сочетании с @Value("\${my.property.name}"), хотя тогда мне придется инициализировать поле или явно указать тип.
Я не смог найти для этого примера или аналогичной ситуации, поэтому мне любопытно, какой подход требуется для этого варианта использования.




Технически это можно сделать:
object MyObject {
lateinit var foo: String
}
@Configuration
class BeanConfiguration {
@Bean
fun myObject(): MyObject {
return MyObject.also {
it.foo = "foo"
}
}
}
но я бы не рекомендовал этот подход, так как он кажется запахом кода. Лучше иметь простые classes, поскольку Spring гарантирует, что методы, аннотированные с помощью @Bean, будут вызываться только один раз (если у них нет области видимости прототипа).
Поскольку object не нужно создавать, вы можете управлять его собственным жизненным циклом, если хотите, вам не нужно помещать все свои вещи в Spring.