UML
"源码分析
ConfigService
com.ctrip.framework.apollo.ConfigService
,客户端配置服务,作为配置使用的入口。
1 | public class ConfigService { |
ConfigManager
com.ctrip.framework.apollo.internals.ConfigManager
,配置管理器**接口**。提供获得 Config 和 ConfigFile 对象的接口,代码如下:
1 | public interface ConfigManager { |
DefaultConfigManager
1 | public class DefaultConfigManager implements ConfigManager { |
ConfigFactoryManager
com.ctrip.framework.apollo.spi.ConfigFactoryManager
,ConfigFactory 管理器**接口**。代码如下:
1 | public interface ConfigFactoryManager { |
- ConfigFactoryManager 管理的是 ConfigFactory ,而 ConfigManager 管理的是 Config 。
DefaultConfigFactoryManager
1 | public class DefaultConfigFactoryManager implements ConfigFactoryManager { |
ConfigFactory
com.ctrip.framework.apollo.spi.ConfigFactory
,配置工厂接口,其每个接口方法和 ConfigManager 一一对应。代码如下:
1 | public interface ConfigFactory { |
DefaultConfigFactory
1 | public class DefaultConfigFactory implements ConfigFactory { |
Config
Uml
"AbstractConfig
com.ctrip.framework.apollo.internals.AbstractConfig
,实现 Config 接口,Config 抽象类,实现了
1)缓存读取属性值、2)异步通知监听器、3)计算属性变化等等特性。
获取属性值
1 | public abstract class AbstractConfig implements Config { |
添加配置变更监听器
1 |
|
触发配置变更监听器们
1 | protected void fireConfigChange(final ConfigChangeEvent changeEvent) { |
提交到线程池中,异步并发通知监听器们,从而避免有些监听器执行时间过长。
DefaultConfig
com.ctrip.framework.apollo.internals.DefaultConfig
,实现 RepositoryChangeListener 接口,继承 AbstractConfig 抽象类,默认 Config 实现类。
构造方法
1 | private static final Logger logger = LoggerFactory.getLogger(DefaultConfig.class); |
获得属性值
1 | public String getProperty(String key, String defaultValue) { |
onRepositoryChange
#onRepositoryChange(namespace, newProperties)
方法,当 ConfigRepository 读取到配置发生变更时,计算配置变更集合,并通知监听器们。代码如下:
1 | public synchronized void onRepositoryChange(String namespace, Properties newProperties) { |