我是春天的新手,不确定是否有一种简单的方法来尝试做。在我将现有的一些现有代码库迁移到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
已经初始化,但这只是在现有代码气味上。凭借春季靴的所有铃铛和哨子,我想使用使用该框架的数百个注释之一,有一种更干净的方法。
您不需要构造函数或静态方法&财产。弹簧靴照顾为您管理对象。
无论您要在哪里使用ConfigurationProvider
声明:
@Autowired
ConfigurationProvider configuration;
并使用此实例
马丁的答案比我想要的解决方案更可取。但是,有一种方法可以通过编程方式注入豆子,但它沿着反图案的线条踩踏。就我而言,由于设计局限性,我无法重构配置单例。
@Autowired
private AutowireCapableBeanFactory autowireFactory;
...
autowireFactory.autowireBean(SingletonClass.getInstance());