Как динамически создавать пружинные бины на основе файла свойств, а затем автоматически связывать их для использования в другом бине? - PullRequest
0 голосов
/ 09 февраля 2020

Я хочу создать компоненты после чтения некоторых свойств из файла application.yaml, а затем добавить их в другие компоненты. Как этого достичь?

Ответы [ 3 ]

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

Вероятно, вам нужно создать свой бин самостоятельно, например:

@Bean
public YourBeanClass createBean() {
  return new YourBeanClass()
}

Затем вы можете добавить свойства из вашего application.yaml с аннотацией @Value в методе создания бина:

@Bean
public YourBeanClass createBean(@Value("${path.to.key}") String propertyValue) {
  return new YourBeanClass(propertyValue)
}

Когда вы создаете такой боб, вы можете просто связать его автоматически, например, в сервисе:

@Service
public class ServiceName {
  public ServiceName(YourBeanClass autowiredType) {

  }
}

И бин YourBeanClass будет автоматически подключен к конструктору вашего ServiceName класс обслуживания для использования. Разрешение зависимости будет выполнено пружиной автоматически.

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

Вот пример , который создает компонент для каждого значения в списке свойств. Это создает различное количество реализаций в зависимости от значений свойств:

@Configuration
public class MineralTypeCreator {

    @Bean
    public List<MineralType> mineralTypes(final MineralProperties mineralProperties) {
        return mineralProperties.getTypeIds().stream().map(GenericMineralType::new).collect(Collectors.toList());
    }

    private class GenericMineralType implements MineralType {

        public GenericMineralType(final String id) {
            this.id = id;
        }
    // ...

Передача свойств в @Bean -метод все еще хорошо, даже если вам нужно только создать один компонент.

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

Возможно, вы захотите использовать аннотацию @Value для добавления свойств из application.yaml в качестве полей в ваш класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...