SpringBoot——Listener(监听器)的使用

常用的监听器接口

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) -- 删除属性时执行

创建Listener的两种方式,ServletContextListener举例

1、通过注解的方式

创建一个类实现ServletContextListener的接口,在这个类上加@WebListener注解,并且在启动类加上@ServletComponentScan注解,这样就完成了。如果要改变监听器监听的对象,比如监听session对象,那就改成实现HttpSessionListener接口就行了

监听器类:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import javax.servlet.annotation.WebListener;



@WebListener
public class ListenerDemo1 implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("进入监听器");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}

启动类:

@SpringBootApplication
@ServletComponentScan
@MapperScan(basePackages = {"wwfww.warehouse.mapper"})//不加这句mapper依赖注入不进来
public class WarehouseApplication {

    public static void main(String[] args) {
        SpringApplication.run(WarehouseApplication.class, args);
    }




}

控制台输出:
SpringBoot——Listener(监听器)的使用

2、在启动类注册Listener

创建一个类实现ServletContextListener接口,并且在启动类创建方法来注册就行了

监听器类:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class ListenerDemo1 implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("进入监听器,方式二");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}

启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import tk.mybatis.spring.annotation.MapperScan;
import wwfww.warehouse.aaaTest.listener.ListenerDemo1;

@SpringBootApplication
@MapperScan(basePackages = {"wwfww.warehouse.mapper"})//不加这句mapper依赖注入不进来
public class WarehouseApplication {

    public static void main(String[] args) {
        SpringApplication.run(WarehouseApplication.class, args);
    }

    /**
     * 注册监听器Listener
     *
     * @return
     */
    @Bean
    public ServletListenerRegistrationBean get() {
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new ListenerDemo1());
        return bean;
    }


}

输出:
SpringBoot——Listener(监听器)的使用

补充:如果实现接口,但是IDEA没有提示你实现接口里面的方法,如下:

SpringBoot——Listener(监听器)的使用
接口里面可以看到有两个方法的

SpringBoot——Listener(监听器)的使用
解决办法:

1、点击右键找到Generate
SpringBoot——Listener(监听器)的使用

2、选择Override Methods

SpringBoot——Listener(监听器)的使用

3、选择图中两个,点击OK就行了

SpringBoot——Listener(监听器)的使用

监听器的应用场景

上一篇:案例解析 | 杭州湾跨海大桥视频上云,夯实智慧高速“云基建”


下一篇:【使用篇】SpringBoot整合Listener(三)