返回介绍

6.2 Spring Boot 使用监听器 Listener

发布于 2025-04-26 13:53:50 字数 2774 浏览 0 评论 0 收藏

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。