学校小故事
为了了解spring流程,需要接受、了解、熟悉很多未知的定义,在此使用 学校 作为辅助,帮助我们了解spring。
<此版本中 新增BeanFactoryPostProcessor>
学校 | spring |
---|---|
学校管理局 | spring开发人员 |
学校信息 | ApplicationContext |
学校人员信息库 | DefaultListableBeanFactory |
学校广播器 | BeanFactory中的applicationEventMulticaster属性 |
学校广播器通知人全信息列表 | BeanFactory中的defaultRetriever对象的applicationListeners属性 |
学校广播器通知人名列表 | BeanFactory中的defaultRetriever对象的applicationListenerBeans属性 |
人员 | bean |
人员信息 | BeanDefinition |
观察者模式
观察者模式链接: 观察者模式
spring中监听器角色
事件
对应 观察者模式 中的被观察者执行方法。
监听器
对应 观察者模式 中的观察者。
根据监听事件执行不同工作。
多播器
对应 观察者模式 中的观察者管理器。
管理监听器、执行 管理的监听器 监听事件方法。
事件源
发布事件的源对象。
spring实例
1、spring中创建多播器
十三太保之八<initApplicationEventMulticaster方法>
initApplicationEventMulticaster方法中
// 创建默认的多播器
758行:this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
2、spring多播器中添加监听器
十三太保之十<registerListeners方法>
registerListeners方法中
// 在 多播器中注册监听器
818行:getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
3、spring事件发布
以 ContextRefreshedEvent<spring启动后发布事件为例>
十三太保之十二<finishRefresh方法>中执行
// 发布 ContextRefreshedEvent 事件
882行:publishEvent(new ContextRefreshedEvent(this));
publishEvent方法中
// 发布 applicationContext 发布事件后,通知 多播器。
398行:getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType);
// 多播器通知监听器 选择性 异步/同步 执行对应事件
136/139行:invokeListener(listener, event);