Ява. Spring. Как зарегистрировать собственное свойство имени класса

Я уже несколько дней ищу способ определить в моем классе свойств (который аннотирован как @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: Ява. Spring. Как зарегистрировать собственное свойство имени класса

мой случай - service.class-name=... Нет предложений: Ява. Spring. Как зарегистрировать собственное свойство имени класса

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

Antoniossss 01.03.2019 16:18

может вопрос был задан не корректно (у меня проблемы с английским=)? я обновил описание

Иван Белозор 01.03.2019 17:14

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

dpr 01.03.2019 18:11

Ага. это то, что я хочу

Иван Белозор 01.03.2019 18:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
296
0

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