Я уже несколько дней ищу способ определить в моем классе свойств (который аннотирован как @ConfigurationProperties) строковое свойство, которое будет именем класса, реализующего указанный интерфейс. Как имя класса spring.datasource.driver.
Если ваш код содержит реализацию java.sql.Driver (или у вас есть несколько зависимостей с impls), то при редактировании файла application.properties, idea поможет вам выбрать драйвер из списка реализаций
Я хочу того же.
Я положил завершенный проект здесь: https://github.com/ibelozor/test-spring-свойства (kotlin, gradle)
я определяю сервис:
interface MyService {
fun doSomething()
}
, реализация [ы]:
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.
случай spring.datasource.driver-class-name:

мой случай - service.class-name=... Нет предложений:

может вопрос был задан не корректно (у меня проблемы с английским=)? я обновил описание
Хорошо, у вас есть файл свойств, в этом файле свойств у вас есть свойство service.class-name (или подобное), и в вашем коде вы используете значение этого свойства для создания экземпляров интерфейса MyService. И теперь вы хотите, чтобы ваша IDE (полагаю, это IntelliJ??) предлагала вам имена классов различных реализаций этого интерфейса, которые доступны в вашем пути к классам, при редактировании файла свойств??
Ага. это то, что я хочу




У меня работает из коробки.