Springboot——监听器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot——监听器相关的知识,希望对你有一定的参考价值。

参考技术A

监听器(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之类的不会。

SpringBoot加载运行时监听器(SpringApplicationRunListeners)

SpringBoot加载运行时监听器(SpringApplicationRunListeners)

利用 Spring 工厂加载机制,读取 SpringApplicationRunListener 对象集合,并且封装到组合类
SpringApplicationRunListeners

实现运行时监听器

  • 创建类实现接口SpringApplicationRunListeners,一定要有带SpringApplication application, String[] args参数的构造函数
public class HelloWorldRunListener implements SpringApplicationRunListener {
    public HelloWorldRunListener(SpringApplication application, String[] args) {
    }
    // Spring 应用刚启动
    @Override
    public void starting() {
        System.out.println("HelloWorldRunListener.starting()...");
    }
    //  ConfigurableEnvironment 准备妥当,允许将其调整
    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
    }
    // configurableApplicationContext 准备妥当,允许将其调整
    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
    }
    // ConfigurableApplicationContext 已装载,但仍未启动
    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
    }
    // ConfigurableApplicationContext 已启动,此时 Spring Bean 已初始化完成
    @Override
    public void started(ConfigurableApplicationContext context) {
    }
    // Spring 应用正在运行
    @Override
    public void running(ConfigurableApplicationContext context) {
    }
    // Spring 应用运行失败
    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
    }
}
  • 在spring.properties文件中添加
# SpringApplicationRunListener
org.springframework.boot.SpringApplicationRunListener=com.imooc.diveinspringboot.run.HelloWorldRunListener

以上是关于Springboot——监听器的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot加载应用事件监听器

springboot源码分析-监听器实现原理(下)

springboot源码分析-监听器实现原理(下)

SpringBoot加载运行时监听器(SpringApplicationRunListeners)

SpringBoot监听器ApplicationListener的使用-监听ApplicationReadyEvent事件

SpringBoot源码掌握了监听机制的本质开发中这真的很爽