Я уже несколько дней ищу способ определения в своем классе свойств (который аннотирован как @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 из spring.datasource.driver-class-name:
мой случай - service.class-name = ... Нет предложений: