Spring常用配置之Application Event(事件)
Spring的事件(Application Event)为Bean与Bean之间的信息通讯提供了支持。当一个Bean处理完一个任务之后,希望另一Bean指定并能做相应的处理,这时我们就需要让另外一个Bean监听当期Bean所发送的事件。其需要遵循如下流程:
(1) 自定义事件,继承ApplicationEvent;
(2)定义事件监听器,实现ApplicationListener;
(3)使用容器发布事件。
下面简单举例上述规范:
1、自定义事件
2、事件监听器
3、事件发布
4、配置
5、运行
测试结果如下:
上例中,在事件发布和实际应用运行中都是用到了容器ApplicationContext,这是两个不同的容器其作用也不一样:前者用于事件发布,后者用于bean的装载。通过此例同时验证了spring的功能不仅仅容器单一功能,该容器还附带其他功能。就如可以放音乐的冰箱,冰箱本身的功能是保存食物,但是不妨碍制造者制造冰箱时提供其基本功能以外的其他功能。
此例中的其他功能Bean之间消息传递使用的Application Event是如何有效工作的呢?发布,监听的这些术语是不是很熟悉?是的就是行为模式中的观察着模式(参考四、观察者模式)。
其UML图如下:
调试代码跟踪发现:在Spring中,prepareBeanFactory时,处理Publisher相关内容;Listener创建时,后置处理器,处理监听器的添加;执行具体发布指令的命令时触发监听者执行相关的指令:
ApplicationContext本身就是一个publisher:
即ApplicationContext进行事件发布时之前,该事件监听者已经进行了注册并与其形参一对多的关系,只待调用: