标签:publish iterator ons spring ble DApp 格式 mutable dev
Config 是通过 PropertySource 提供. 这节的内容主要是探讨配置, 特别是 PropertySource 的加载机制.
API: java.util.Observable
, java.util.Observer
发布者通过 observable.notifyObservers()
通知, 订阅者是被动感知的. 这种模式是推模式. 而迭代器Iterator 是拉模式, 通过循环主动获取.
API: 类 java.util.EventObject
, 接口 java.util.EventListener
, 此接口是一个标识接口, 无方法.
ApplicationEvent
: 事件. 扩展了 EventObject
.
ApplicationListener
: 事件监听器, 扩展了 EventListener
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
// 注册监听器
context.addApplicationLinstener(new ApplicationListener<MyApplicationEvent>(){
@Override
public void onApplicationEvent(MyApplicationEvent event){
System.out.println("接收到事件: " + event.getSource());
}
});
context.refresh();
// 发布事件
context.publishEvent(new MyApplicationEvent("test event"));
MyApplicationEvent
可以通过构造器等注入 context
对象, 从而能拿到工厂中的任意 bean 对象.
ApplicationEnvironmentPreparedEvent
ApplicationPreparedEvent
ApplicationStartingEvent
ApplicationReadyEvent
ApplicationFailedEvent
ConfigFileApplicationListener
管理配置文件, 如 application-{profile}.properties
或 yaml 格式的文件. 通过下面入口函数找, 可以发现加载配置文件的 Loader.load()
方法@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationEnvironmentPreparedEvent) {
onApplicationEnvironmentPreparedEvent(
(ApplicationEnvironmentPreparedEvent) event);
}
if (event instanceof ApplicationPreparedEvent) {
onApplicationPreparedEvent(event);
}
}
在 /META-INF/spring.factories
文件中配置了需要加载的监听器, 其中包括了 ConfigFileApplicationListener
ConfigFileApplicationListener
实现了 Orderd
接口 , 用来控制顺序.BootstrapApplicationListener
第一, 负责加载 bootstrap.properties
或 yaml 格式的文件. 第二, 负责加载 ApplicationContext
名为 bootstrap
( ConfigurableApplicationContext context = builder.run()
).PropertySourceLocator
@Ordered
, @Configuration
spring.factories
文件, key为 org.springwork.cloud.bootstrap.BootstrapConfiguration
Environment
允许出现同名配置, 优先级高的胜出.
MutablePropertySources
使用了CopyOnWriteArrayList
数据结构
public class MutablePropertySources implements PropertySources {
// 使用了 CopyOnWriteArrayList
private final List<PropertySource<?>> propertySourceList = new CopyOnWriteArrayList<>();
...
}
Spring Boot系列(四) Spring Cloud 之 Config Client
标签:publish iterator ons spring ble DApp 格式 mutable dev
原文地址:https://www.cnblogs.com/walkinhalo/p/10846986.html