Джава. Весна. Как зарегистрировать собственное свойство 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 =... нет предложений:

0 ответов

Другие вопросы по тегам