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进行事件发布时之前,该事件监听者已经进行了注册并与其形参一对多的关系,只待调用:

                

 

posted on 2021-07-14 11:31  池塘里洗澡的鸭子  阅读(221)  评论(0编辑  收藏  举报