博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的实践、监听和发布
阅读量:5991 次
发布时间:2019-06-20

本文共 2932 字,大约阅读时间需要 9 分钟。

Spring的事件(Applicaction Event)为Bean与Bean之间的消息通信提供了支持,当一个Bean处理完一个任务后,希望另外一个Bean知道并且能够做响应的处理,这是我们需要让另外一个Bean监听当前Bean所发送的事件。

Spring事件需要遵循如下的流程:

(1)自定义事件,继承ApplicationEvent

(2)定义事件监听器,实现ApplicationListener

(3)使用容器发布事件


示例如下:

1、自定义事件

package com.lwh.highlight_spring4.ch2.event;/** * Created by luwenhu on 2017/9/20. */import org.springframework.context.ApplicationEvent;/** * Spring的事件为Bean与Bean之间的消息通信提供了支持,当Bean处理完一个任务后,希望另外一个Bean知道并且能做响应的处理 * 这时我们需要让另外一个Bean监听当前Bean所发送的事件 * 流程: * (1)自定义事件,继承ApplicationEvent * (2)定义事件监听器,实现ApplicationListener * (3)使用容器发布事件 *///(1)自定义一个事件public class DemoEvent extends ApplicationEvent {    private static final long serialVersionUID = 1L;    private String msg;    public String getMsg() {        return msg;    }    public void setMsg(String msg) {        this.msg = msg;    }    /**     * Create a new ApplicationEvent.     *     * @param source the component that published the event (never {
@code null}) */ public DemoEvent(Object source,String msg) { super(source); this.msg = msg; }}

2、事件监听器

package com.lwh.highlight_spring4.ch2.event;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;/** * Created by luwenhu on 2017/9/20. *///(2)事件监听器@Componentpublic class DemoListener implements ApplicationListener
{ public void onApplicationEvent(DemoEvent event) { String msg = event.getMsg(); System.out.println("我(bean-demoListener)接收到bean-demoPublisher发布的消息:"+msg); }}

3、事件发布类

package com.lwh.highlight_spring4.ch2.event;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;/** * Created by luwenhu on 2017/9/20. *///(3)事件的发布类@Componentpublic class DemoPublisher {    @Autowired//注入Application用来发布事件    ApplicationContext applicationContext;    public void publish(String msg){        applicationContext.publishEvent(new DemoEvent(this,msg));    }}

4、配置类

package com.lwh.highlight_spring4.ch2.event;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;/** * Created by luwenhu on 2017/9/20. */@Configuration@ComponentScan("com.lwh.highlight_spring4.ch2.event")public class EventConfig {}

5、运行

package com.lwh.highlight_spring4.ch2.event;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * Created by luwenhu on 2017/9/20. */public class Main {    public static void main(String[] args){        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);        DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);        demoPublisher.publish("hello application event");        context.close();    }}

运行结果:

 

转载于:https://www.cnblogs.com/wenhulu/p/7560204.html

你可能感兴趣的文章
我的监理生活阶段性总结
查看>>
Linux 系统中screen命令不能使用的解决办法,screen包的正确安装
查看>>
Linux(centOS)Java环境配置
查看>>
Nagios 监控系列学习 —— MRTG监控交换机流量
查看>>
大型互联网站解决高并发的常见策略
查看>>
聚集索引和非聚集索引的区别有哪些
查看>>
http svn svn http
查看>>
两个combox控件,根据第一个combox1的改变来取combox2的范围
查看>>
PHP文件上传-多文件上传思路
查看>>
我的友情链接
查看>>
运维工作中的bootstraping之PXE自动安装操作系统
查看>>
AVI VS. MKV
查看>>
Unable to start services for VMware Tools
查看>>
绘制饼状图,绘制曲线,裁剪图片,添加水印
查看>>
PHP7变化
查看>>
smartd 报告硬盘问题
查看>>
Optaplanner规划引擎的工作原理及简单示例(2)
查看>>
kali使用rdesktop连接Windows远程桌面
查看>>
mysql 一
查看>>
java--原子性、Atomic类
查看>>