使用Spring访问共享配置对象

时间:2019-07-01 15:57:16

标签: java spring spring-config

我是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 个答案:

答案 0 :(得分:2)

您不需要构造函数或静态方法和属性。 Spring Boot会为您管理对象。

您想使用ConfigurationProvider声明的地方:

@Autowired
ConfigurationProvider configuration;

并使用该实例

答案 1 :(得分:0)

马丁的答案比我一直在寻找的解决方案更好。但是,有一种方法可以通过程序注入您的bean,但它会沿着反模式行进。就我而言,由于设计限制,我无法重构配置单例。

@Autowired
private AutowireCapableBeanFactory autowireFactory;

...

autowireFactory.autowireBean(SingletonClass.getInstance());