Доступ к общему объекту конфигурации с помощью Spring - PullRequest
0 голосов
/ 01 июля 2019

Я новичок в Spring и не уверен, есть ли простой подход к тому, что я пытаюсь сделать.Прежде чем перенести существующую кодовую базу в Spring, я вручную загружал свойства конфигурации в одноэлементный класс с именем ConfigurationProvider - довольно просто.

Теперь, когда я перешел на Spring Cloud Config, я пытаюсь определить,прагматичный подход к объекту глобальной конфигурации с минимальной ручной настройкой.Моя текущая реализация - класс, который не так однозначен, который почти выполняет то, что я рассчитываю сделать, но идет с недостатком дизайна.

@Configuration
public class ConfigurationProvider {

    private static ConfigurationProvider _instance;

    @Autowired
    private StorageConfiguration storage;

    // this being the design flaw
    public ConfigurationProvider() {
        _instance = this;
    }

    public static ConfigurationProvider getInstance() {
        return _instance;
    }

    ...
}

Я подумал об исключении, если ConfigurationProvider::_instance уже инициализирован, но этопросто приклеить запах существующего кода.Со всеми прибамбасами Spring Boot, я думаю, есть более чистый подход, использующий одну из сотен аннотаций, связанных с этой структурой.

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

вам не нужен конструктор или статические методы и свойства. Spring boot позаботится об управлении объектом для вас.

Везде, где вы хотите использовать ConfigurationProvider, объявите:

@Autowired
ConfigurationProvider configuration;

и используйте этот экземпляр

0 голосов
/ 08 июля 2019

Ответ Мартина предпочтительнее решения, которое я искал. Тем не менее, есть способ внедрить ваши bean-компоненты программно, но он идет по линии анти-паттерна. В моем случае я не могу выполнить рефакторинг синглтона конфигурации из-за конструктивных ограничений.

@Autowired
private AutowireCapableBeanFactory autowireFactory;

...

autowireFactory.autowireBean(SingletonClass.getInstance());
...