SpringBoot2.X学习第十六课(Listener监听器)

上节课我们讲解了过滤器,这节课进行监听器Listener的讲解, 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。通俗的讲,监听器就比如你盯着一盘好吃的,有人拿你的吃的的时候,你会立马采取相应的行动。

此处我们以ServletRequestListener以及ServletContextListener来举例,ServletRequestListener与ServletContextListener都是接口,ServletRequestListener接口是用来监听请求的,里面有两个方法,分别是请求创建和请求销毁,ServletContextListener是用来监听Servlet容器的,里面有两个方法,分别是容器创建和容器销毁。我们实现自定义监听器是使用最新的Servlet3.0的注解方式实现的,非常的方便!(2.5不支持注解),如果跟我上篇Filter使用bean的方式实现Listener也是可以的,只是这里没做

一.自定义请求监听器

创建一个RequestListener监听器实现ServletRequestListener接口,并实现创建以及销毁方法,注意加上@WebListener注解,这样Web容器就会把它当做一个监听器进行注册和使用了

@WebListener
public class RequestListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("======requestDestroyed========");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("======requestInitialized========");
    }
}

然后写一个接口加上打印,

@RequestMapping("/litener/index")
    public String listenerIndex(){
        System.out.println("--------controller处理中-----");
        return "index";
    }

最后启动项目发送一个请求:http://localhost:8081/litener/index,监听器起作用!

 二.自定义容器监听器

创建一个ContextListener监听器实现ServletContextListener接口,并实现创建以及销毁方法

@WebListener
public class ContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("======contextInitialized========");

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("======contextDestroyed========");

    }
}

然后重启应用,发现在容器应用刚启动的时候监听器就启动了。

监听器与filter一样,直接关闭应用是看不到容器销毁的,只有在热部署的时候才能看到contextDestroyed()方法里面的打印(不了解热部署的可以看我之前的博文https://blog.csdn.net/qq_33355821/article/details/86616794

热部署的时候会先销毁Filter,再销毁Listener,因为容器是最先加载的,他要在最后销毁

 

应用场景:listener主要做一些资源的加载,比如在项目启动的时候加载一些redis缓存的数据,做一些统计比如在线人数等等,他是新开的一个线程,不会干扰主线程的启动,比较方便

下面列举一些常用的监听器,我们只要实现他们的接口就行了:

1.ServletContextListener -- 监听servletContext对象的创建以及销毁

    1.1    contextInitialized(ServletContextEvent arg0)   -- 创建时执行

    1.2    contextDestroyed(ServletContextEvent arg0)  -- 销毁时执行

2.HttpSessionListener  -- 监听session对象的创建以及销毁

    2.2   sessionCreated(HttpSessionEvent se)   -- 创建时执行

    2.2   sessionDestroyed(HttpSessionEvent se) -- 销毁时执行

3.ServletRequestListener -- 监听request对象的创建以及销毁

    3.1    requestInitialized(ServletRequestEvent sre) -- 创建时执行

    3.2    requestDestroyed(ServletRequestEvent sre) -- 销毁时执行

4.ServletContextAttributeListener  -- 监听servletContext对象中属性的改变

    4.1    attributeAdded(ServletContextAttributeEvent event) -- 添加属性时执行

    4.2    attributeReplaced(ServletContextAttributeEvent event) -- 修改属性时执行

    4.3    attributeRemoved(ServletContextAttributeEvent event) -- 删除属性时执行

5.HttpSessionAttributeListener  --监听session对象中属性的改变

    5.1    attributeAdded(HttpSessionBindingEvent event) -- 添加属性时执行

    5.2    attributeReplaced(HttpSessionBindingEvent event) -- 修改属性时执行

    5.3    attributeRemoved(HttpSessionBindingEvent event) -- 删除属性时执行

6.ServletRequestAttributeListener  --监听request对象中属性的改变

    6.1    attributeAdded(ServletRequestAttributeEvent srae) -- 添加属性时执行

    6.2    attributeReplaced(ServletRequestAttributeEvent srae) -- 修改属性时执行

    6.3    attributeRemoved(ServletRequestAttributeEvent srae) -- 删除属性时执行
参考:https://blog.csdn.net/m0_38075425/article/details/81164501

源码地址:https://gitee.com/xuxinsunqizheng/SpringBoot2.0.git   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章