Spring的事件监听机制用法

事件监听的简单讲解:https://www.cnblogs.com/xinde123/p/8918714.html

 

在一个完整的事件体系中,除了事件监听器以外,还应该有3个概念;

1. 事件源:事件的产生者,任何一个event都必须有一个事件源;

2. 事件广播器:它是事件和事件监听器之间的桥梁,负责把事件通知给事件监听器;

3. 事件监听器注册表:就是spring框架为所有的监听器提供了一个存放的地方;

通过流程图,可以看出它们是如何各司其职的,如下:

 

结构分析:

1.  事件类ApplicaitonEvent):目前spring框架本身仅仅提供了几个事件,很多的事件都是需要自定义的。

 ApplicationEvent唯一的构造函数是ApplicaitonEvent(Object source),通过source指定事件源。  它有两个子类;

(1)ApplicationContextEvent:容器事件,也就是说事件源是ApplicationContext,框架提供了四个子类,分别代表容器启动,刷新,停止和关闭事件。

(2)RequestHandleEvent:这是一个与Web应用相关的事件,当一个请求被处理后,才会产生该事件。

一般来说,我们都是扩展ApplicationEvent来自定义事件。下面会有栗子。

一般自定义事件的话,都是继承父类ApplicationContextEvent

构造一个事件示例如下:

public class MailSendEvent extends ApplicationEvent {
    private String to;   //目的地

    //构造函数
    public MailSendEvent(Object source, String to) {
        super(source);
        this.to = to;
    }
}

 

2.发送事件

通过容器本身 applicationContext 的publishEvent来发送

MailSendEvent event = new MailSendEvent(applicationContext, to);
applicationContext.publishEvent(event);   //同步事件通知

 

3. 事件监听器接口ApplicationListener

有两种方法:

一:所有的监听器都需要实现该接口,该接口只定义了一个方法:onApplicaitonEvent (E event),该方法接收事件对象,在该方法中编写事件的响应处理逻辑。

示例如下:

public class MailSendListener implements ApplicationListener<MailSendEvent> {
    @Override
    public void onApplicationEvent(MailSendEvent mailSendEvent) {
        MailSendEvent event = mailSendEvent;
        System.out.println("MailSender向" + event.getTo() + "发送了邮件" + ";线程为:" + Thread.currentThread().getName()); 
        System.out.println("第一步处理结束-------");
    }
}

二:通过@EventListener(MailSendEvent.class)注解

@Component
public class MailSendListenerAnnotion {
    @EventListener(MailSendEvent.class)
    public void sendSms() {
        System.out.println("注解监听器开始发送短信..." + ";线程为:" + Thread.currentThread().getName());
        try {
            Thread.currentThread().sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("注解监听器执行结束");
    }

}

 

 

Spring的事件监听机制就是观察者模式的一种体现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值