Я использую Kotlin для приложения Spring (не Spring Boot), и я хотел бы создать Bean из свойства.
Это началось как функция с отдельным резервным полем.
private val _guessCount = 10
@Bean
open fun guessCount() = _guessCount
Но потом я стал искать более лаконичный вариант:
@Bean
open val guessCount: Int = 10
... который вызывает исключение
Kotlin: This annotation is not applicable to target 'member property with backing field'
Итак, я попробовал это с помощью аксессуара get:
@get:Bean
open val guessCount: Int = 10
... что вызывает другое исключение
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'int' available: expected single matching bean but found 1: getGuessCount
Это исключение имеет смысл, но теперь я могу решить его только так:
@get:Bean("guessCount")
open val guessCount: Int = 10
или же
open val guessCount: Int = 10
@Bean("guessCount") get
Они работают, но выглядят некрасиво. Особенно со струной guessCount
Кто-нибудь знает, как это сделать лучше?
Рассматривали ли вы создание подкласса
AnnotationBeanNameGeneratorи установку его экземпляра наAnnotationConfigApplicationContext? docs.spring.io/spring-framework/docs/current/javadoc-api/org /…