- 内容简介
- 前言
- 第 1 章 第一个 Spring Boot 项目
- 第 2 章 集成 MySQL 数据库
- 第 3 章 集成 Spring Data JPA
- 第 4 章 使用 Thymeleaf 模板引擎
- 第 5 章 Spring Boot 事务支持
- 第 6 章 使用过滤器和监听器
- 第 7 章 集成 Redis 缓存
- 第 8 章 集成 Log4j 日志
- 8.3 使用 Log4j 记录日志
- 第 9 章 Quartz 定时器和发送 Email
- 第 10 章 集成 MyBatis
- 第 11 章 异步消息与异步调用
- 第 12 章 全局异常处理与 Retry 重试
- 第 13 章 集成 MongoDB 数据库
- 第 14 章 集成 Spring Security
- 第 15 章 Spring Boot 应用监控
- 第 16 章 集成 Dubbo 和 Zookeeper
- 第 17 章 多环境配置与部署
- 第 18 章 Spring Boot 原理解析
- 参考文献
6.2 Spring Boot 使用监听器 Listener

6.2.1 监听器 Listener 介绍
监听器也叫 Listener,是 Servlet 的监听器,可以用于监听 Web 应用中某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的响应处理。当范围对象的状态发生变化时,服务器自动调用监听器对象中的方法,常用于统计在线人数和在线用户,系统加载时进行信息初始化、统计网站的访问量等。
根据监听对象可以把监听器分为 3 类:ServletContext(对应 application)、HttpSession(对应 session)、ServletRequest(对应 request)。Application 在整个 Web 服务中只有一个,在 Web 服务关闭时销毁。Session 对应每个会话,在会话起始时创建,一端关闭会话时销毁。Request 对象是客户发送请求时创建的(一同创建的还有 Response),用于封装请求数据,在一次请求处理完毕时销毁。
根据监听的事件,可把监听器分为以下 3 类。
(1)监听对象创建与销毁,如 ServletContextListener。
(2)监听对象域中属性的增加和删除,如 HttpSessionListener 和 ServletRequestListener。
(3)监听绑定到 Session 上的某个对象的状态,如 ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener 等。
6.2.2 监听器 Listener 的使用
在 Spring Boot 中使用 Listener 监听器和 Filter 基本一样。首先我们在项目 my-spring-boot 的目录/src/main/java/com.example.demo.listener 下新建 AyUserListener.java 类,具体代码如下:
- @WebListener:用于将一个类声明为监听器,该注解将会在应用部署时被容器处理,容器根据具体的属性配置将相应的类部署为监听器。这样我们在 Web 应用中使用监听器时,不需要在 web.xml 文件中配置监听器的相关描述信息。
- ServletContextListener 类:能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。当 Servlet 容器启动或终止 Web 应用时,会触发 ServletContextEvent 事件,该事件由 ServletContextListener 类来处理。在 ServletContextListener 接口中定义了处理 ServletContextEvent 事件的两个方法:contextInitialized 和 contextDestroyed。
contextInitialized:当 Servlet 容器启动 Web 应用时调用该方法。在调用完该方法之后,容器再对 Filter 初始化,并且对那些在 Web 应用启动时就需要被初始化的 Servlet 进行初始化。
contextDestroyed:当 Servlet 容器终止 Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的 Servlet 和 Filter 过滤器。
我们可以在 contextInitialized 方法中查询所有的用户,利用缓存技术把用户数据存放到缓存中。在第 7 章中会具体讲解如何利用监听器和 Redis 缓存技术来缓存用户数据,提高系统性能。
6.2.3 测试
6.2.2 节的代码开发完成之后,重新启动运行 my-spring-boot 项目时,Web 容器会初始化 AyUserListener 对象,并调用 contextInitialized 方法,可以在 IntelliJ IDEA 控制台看到打印信息,如图 6-4 所示。当我们销毁容器时,会调用 contextDestroyed 方法,并在控制台打印信息。这里需要注意的是,在 IDEA 开发工具中,直接终止容器或者关闭进程是不会执行销毁方法 contextDestroyed 的。
图 6-4 容器启动监听打印信息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论