Джава. Весна. Как зарегистрировать собственное свойство class-name
Я уже несколько дней ищу способ определения в своем классе свойств (который аннотирован как @ConfigurationProperties) строкового свойства, которое будет именем класса, реализующего указанный интерфейс. Как в spring.datasource.driver-class-name.
Если ваш код содержит реализацию java.sql.Driver (или у вас есть несколько зависимостей с impls), то при редактировании файла application.properties идея поможет вам выбрать драйвер из списка реализаций.
Я хочу того же.
Я положил завершенный проект здесь: https://github.com/ibelozor/test-spring-properties (kotlin, gradle)
я определяю услугу:
interface MyService {
fun doSomething()
}
, реализация [s]:
class ServiceAImpl: MyService {
override fun doSomething() {
println("Do something implementation from ${this.javaClass.name}")
}
}
, свойства:
/**
* Service properties
*/
@Component
@ConfigurationProperties(prefix = "service")
data class MyServiceProps (
/**
* Device driver class name
*/
var className: String = "ru.ibelozor.test.classname.DefaultServiceImpl"
) {
fun getService(): MyService {
val serviceClass = Class.forName(className)
return MyService::class.java.cast(serviceClass.newInstance())
}
}
так что я могу использовать свой сервис как бин (и это прекрасно работает):
@Configuration
class TestConfig
@Autowired constructor(private val props: MyServiceProps) {
@Bean
fun getMyService(): MyService {
return props.getService()
}
}
Но я хочу, чтобы эта идея предложила мне реализации моего интерфейса при редактировании файла application.properties
case of spring.datasource.driver-class-name:
мой случай - service.class-name =... нет предложений: