2、初始化一个SpringApplicationRunListeners进行处理
3、从spring.factories中读取监听器处理类EventPublishingRunListener
4、通过createSpringFactoriesInstances创建监听器处理类实例
5、调用监听器listeners.starting()的方法来启动
6、底层把事件处理交给线程池去处理
监听器(Listener)是servlet规范中定义的一种特殊类。用于监听servletContext、HttpSession和servletRequest等域对象的创建和销毁事件;监听域对象的属性发生修改的事件;用于在事件发生前后做一些必要的处理。
其主要可用于以下方面:
1、统计在线人数和在线用户
2、系统启动时加载初始化信息
3、统计网站访问量
4、记录用户访问路径。
Servlet中的监听器的分类:
(1)监听三个域对象的创建和销毁的监听器
(2)监听三个域对象的属性变更(属性添加、移除、替换)的监听器
(3)监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听
监听器相关术语:
事件源:被监听者
监听器:监听者
事件源和监听器绑定:在事件源上安装监听器
事件:指的是事件源对象的改变——主要功能获得事件源对象。
统计在线人数
方式1、使用自带的ServletListenerRegistrationBean 完成设置
(1)首先创建一个MyHttpSessionListener类
(2)使用@Configuration注解替代web.xml对监听器进行配置
(3)创建一个控制器UserController
方式2、 使用@WebListener注解完成设置
(1)创建一个MyHttpSessionListener类
(2)在入口类(Listenerdemo2Application)中加入@ServletComponentScan注解,开启对注解@WebListener的支持
(3)创建一个控制器UserController(同方式1)
!注:(1)使用@ServletComponentScan配合@WebListener后,就不用创建MyMvcConfig这个类。二者选其一即可。
(2)springboot默认会检索启动类所在包和子包下的所有spring容器相关的注解(比如@Controller、@Component等),但是像@WebFilter和@WebListener之类的不会。
Spring的监听器也可以说是一种观察者模式,它能实现事件与事件监听者直接的解耦,在Spring中监听器的实现主要有一下重要组件:
新增新事件只需要实现Spring提供的ApplicationEvent 的接口
同理新增监听器只需要实现ApplicationListener接口
运行Spring发布事件
Spring容器启动的时候在不同阶段会发布不同事件,我们可以根据自己的需求进行监听。(阿里的nacos服务自动注册原理就是监听到web容器初始化完成事件,完成自动注册发现)。
Spring容器启动完之后,会发布一个ContextRefreshedEvent事件,我们可以实现自己的监听器进行监听。
运行结果
运行结果
有些时候我们事件传递的对象是一些简单的对象,比如一个字符串,不想继承ApplicationEvent对象,可以使用PayloadApplicationEvent
运行结果
Spring监听器的基本使用到这里的结束了,后面会仿照Spring,手写一个监听器框架,带大家理解Spring的监听器的原理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)