Spring监听器Listener

监听器是什么

  1. 监听器的主要作用

    • 监听器的作用是监听一些事件的发生从而进行一些操作,比如监听ServletContext,HttpSession的创建,销毁,从而执行一些初始化加载配置文件的操作,
    • 当Web容器启动后,Spring的监听器会启动监听,监听是否创建ServletContext的对象,如果发生了创建ServletContext对象这个事件(当web容器启动后一定会生成一个ServletContext对象,所以监听事件一定会发生),ContextLoaderListener类会实例化并且执行初始化方法,将spring的配置文件中配置的bean注册到Spring容器中,
    • 怎样监听是否创建servletContext???
  2. 源码解读:https://zhuanlan.zhihu.com/p/439290262

  3. 监听器实现 三种

    • 1、实现ApplicationListener接口针对单一事件监听
    • 2、实现SmartApplicationListener接口针对多种事件监听,通过在supportsEventType这个方法里面指定监听的方法类型
    • 3、Order值越小越先执行
    • 4、application.properties中定义的优于其他方式
  4. 主要类ApplicationEvent,ApplicationListener,publisher.publishEvent

  5. 使用的设计模式及实现原理 使用的 观察者模式

  6. 工作中哪里会用到监听器,实现什么样的功能?

  7. spring中用监听器实现了哪些功能 如1中介绍的

  8. 和servlet和filter 的区别?

  9. 和springboot中监听器的区别?

  10. Springboot内置事件

ApplicationStartingEvent:SpringBoot启动开始的时候发布的事件
ApplicationEnvironmentPreparedEvent:SpringBoot对应Environment准备完毕时发布的事件,此时上下文还没有创建,该事件中可以获取配置信息。通过监听该事件可以修改默认的配置信息,配置中心就是借助该事件完成将远端配置放入应用中
ApplicationContextInitializedEvent:当准备好上下文,并且在加载任何Bean之前发布的事件。该事件可以获取上下文信息
ApplicationPreparedEvent:上下文创建完成时发布的事件,此时的Bean还没有完全加载完成,只是加载了部分特定Bean。该事件可以获取上下文信息,但是无法获取自定义Bean,应为还没有被加载
ApplicationStartedEvent:上下文刷新(完成所有Bean的加载)之后,但是还没有调用任何ApplicationRunner 和CommandLineRunner运行程序之前发布的事件。该事件同样可以获取上下文信息,并且可以获取自定义的Bean
ApplicationReadyEvent:完成ApplicationRunner 和CommandLineRunner运行程序调用之后发布的事件,此时的SpringBoot已全部启动完成。该事件同样可以获取上下文信息
ApplicationFailedEvent:SpringBoot启动异常时发布的事件。该事件可以获取上下文信息和异常信息,通过该事件可以友好地完成资源的回收
上述7个事件在容器启动的合适阶段进行发布,发布顺序自上而下,可查看SpringApplication的run(String… args)方法,分别对应SpringApplicationRunListener的7个方法,源码如下:

// 该接口规定了SpringBoot的生命周期,会在各个生命周期广播响应的事件,调用实际的监听器
public interface SpringApplicationRunListener {
    // 发布ApplicationStartingEvent
    default void starting() {
    }
    // 发布ApplicationEnvironmentPreparedEvent
    default void environmentPrepared(ConfigurableEnvironment environment) {
    }
    // 发布ApplicationContextInitializedEvent
    default void contextPrepared(ConfigurableApplicationContext context) {
    }
    // 发布ApplicationPreparedEvent
    default void contextLoaded(ConfigurableApplicationContext context) {
    }
    // 发布ApplicationStartedEvent
    default void started(ConfigurableApplicationContext context) {
    }
    // 发布ApplicationReadyEvent
    default void running(ConfigurableApplicationContext context) {
    }
    // 发布ApplicationFailedEvent
    default void failed(ConfigurableApplicationContext context, Throwable exception) {
    }
}
- ServletContextListener

监听servletContext对象的创建以及销毁
执行时机:
contextInitialized(ServletContextEvent arg0) – 创建时执行
contextDestroyed(ServletContextEvent arg0) – 销毁时执行

- ServletRequestListener

监听request对象的创建以及销毁
执行时机:
requestInitialized(ServletRequestEvent sre) – 创建时执行
requestDestroyed(ServletRequestEvent sre) – 销毁时执行

  1. 事件:ApplicationEvent

ApplicationEvent是Spring事件的顶层抽象类,代表事件本身,继承自JDK的EventObject。Spring提供了一些内置事件,如ContextClosedEvent、ContextStartedEvent、ContextRefreshedEvent、ContextStopedEvent等
在这里插入图片描述

参考链接:

  • https://blog.csdn.net/zlt995768025/article/details/119489177
  • https://blog.csdn.net/qq_37175706/article/details/117809136
  • https://zhuanlan.zhihu.com/p/270596548
  • https://blog.csdn.net/JokerLJG/article/details/121541262
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值