Как условно автоматически связать класс конфигурации с сервисом - PullRequest
0 голосов
/ 23 января 2020

В настоящее время у меня есть класс обслуживания, в котором я пытаюсь создать класс конфигурации auto wire auto. Тем не менее, я ожидаю, что мой класс обслуживания будет обобщенным c и будет работать для любого класса конфигурации с аналогичными свойствами. Есть ли способ, которым я могу условно автоматически подключить конфигурацию класса в классе обслуживания на основе параметра. Я не хочу никаких условий если иное. Ниже приведен мой пример кода

    @Service
    public ServiceClass {
    private COnfigurationClass configurationClass

    public ServiceClass(COnfigurationClass configurationClass) {
       this.configurationClass = configurationClass
    }

    //Some method that makes use of configuration class

    }

    @ConfigurationProperties(prefix="abc")
    public class COnfigurationClass {
      enter code here
    }

Я хочу, чтобы мой ServiceClass автоматически связывал новый ConfigurationClass с префиксом = "xyz" на основе параметра, который я передаю при инициализации ServiceClass

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

, поэтому простым решением было бы добавить аннотацию @ConditionalOnProperty (value = "bean.enabled") к методу, в котором создается ваш компонент (bean-компонент configurationClass)

и при автоматической его передаче в ваш используйте класс обслуживания @Autowired (обязательно = false), хотя позже вам придется выполнить проверку на ноль при использовании

. Обратитесь к аналогичному вопросу, который мог бы помочь, Как выполнить условную автопроводку при весенней загрузке?

0 голосов
/ 10 февраля 2020

Хорошо, я смог решить это. Я создал базовый класс, который был расширен несколькими классами конфигурации, которые имели одинаковые свойства конфигурации.

Теперь я автоматически связываю все классы конфигурации в виде списка

Ниже приведен мой пример

@Component
public class BaseConfig {

}

@Component
@ConfigurationProperties(prefix="abc")
public class ConfigABC extends BaseConfig {

}

@Component
@ConfigurationProperties(prefix="xyz)
public class ConfigXYZ extends BaseConfig {

}



@Service
public SomeService {

@Autwire
List<BaseConfig> baseConfig; //baseConfig contains the list of all BaseConfig classes

baseConfig.checkForSomeProperty() //Determine which config property to use

}

}


...