一、概述
监听就是一个事务的触发,会被一个监听器观察到,并执行相应的处理,也就是典型的观察者模式。
监听的三大要素:
1、事件(触发条件)
2、监听器(观察这个事件是否执行)
3、触发动作(观察到了之后,要执行什么操作)
二、spring中用监听器
1、简单的使用方式:
(1)、创建一个事件,继承ApplicationEvent抽象类
(2)、创建一个监听器,实现ApplicationListener接口,
泛型中指定事件类型,在重写的onAppEvent方法中,
写监听到改事件之后的执行逻辑
(3)、注册监听器到容器中,发布事件。
总结:
流程就是定义好事件,然后定义一个监听器来监听这个事件,
然后再用applicationContext来注册监听器到spring容器,
并发布一个事件。
当发布事件之后,监听器就会监听到该事件,
并执行onAppevent方法里面的逻辑。
2、利用注解的方式
(1)、定义一个事件,和上面原始方式一样
(2)、注解方式定义监听器,在这个事件处理模块里面,可以定义对公监听器
,不用一个监听器写一个类,方便统一管理。
有一个EventListenerMethodProcessor类,这个类是application启动时自动注册执行的。
该类的功能是扫描@EventListener注解并生成一个ApplicationListener实例。
(3)、发布事件,异步发布,比如在做某些操作的时候才发布,而不是和上面一样
项目启动时就发布事件
这样就需要实现ApplicationContextAware接口,获得ApplicationContext实例,通过context发事件。
因为ApplicationContext实现了ApplicationEventPublisher接口,所以它有发事件的功能。
总结:
先定义一个事件,然后在一个统一的处理类里面用注解的方式去定义对应的监听器,
spring容器启动的时候会根据这个注解生成对应的监听器。
然后异步发布事件,也就是在执行某个操作的时候才发布事件,
而不是项目启动的时候就发布。
异步发布事件需要在对应的类去实现ApplicationContextAware接口,
用于获取到ApplicationContext实例进行发布。
3、线程池异步监听
(1)、创建一个异步线程池处理配置对象
(2)、定义事件发布者,这里使用springContext代理,也可以应用MQ或其他事件框架
(3)、在统一的处理类里面用注解或者原始的继承ApplicationListener的方式来注册监听器
(4)、在对应的位置用事件发布者对象来发布事件
总结:
先定义好事件,然后注册好对应的监听器
然后定义一个统一的异步线程池
然后定义事件发布者,这里使用springContext代理,也可以应用MQ或其他事件框架,
在发布方法上用注释@Async(指定线程池)
最后在需要发布的地方用事件发布者发布事件(是用线程池异步发布的的),
就会被监听器监听到,从而执行相应的逻辑。