zoukankan      html  css  js  c++  java
  • SpringBoot自定义监听器

    【问题】实现ApplicationListener接口和实现SmartApplicationListener 接口? 

    实现ApplicationListener接口针对单一事件监听

    实现SmartApplicationListener 接口针对多种事件监听

    其它注意:

    Order值越小越优先执行

    使用application.properties中定义的优于其它方式

    【问题】如何自定义监听器? 

    一、实现方式1

    1、创建监听器类FirstListener.java 

    @Order(1)
    public class FirstListener  implements ApplicationListener<ApplicationStartedEvent> {
    
    
        @Override
        public void onApplicationEvent(ApplicationStartedEvent event) {
            System.out.println("hello, first listener");
        }
    }
    

      

    2、在spring.factories文件中增加配置监听器

    org.springframework.context.ApplicationListener=com.example.demo.listener.FirstListener

    3、运行查看效果

    二、实现方式2

    1、创建监听器类

    @Order(2)
    public class SecondListener   implements ApplicationListener<ApplicationStartedEvent> {
    
    
        @Override
        public void onApplicationEvent(ApplicationStartedEvent event) {
            System.out.println("hello, second listener");
        }
    }
    

      

    2、实例化SpringApplication,然后增加监听器

    @SpringBootApplication
    @MapperScan("com.example.demo.mapper")
    public class Sb2Application {
    
    	public static void main(String[] args) {
    		
    		SpringApplication springApplication = new SpringApplication(Sb2Application.class);
    		springApplication.addListeners(new SecondListener());
    		springApplication.run(args);
    	}
    
    }
    

      

    3、运行

    三、实现方式3

    1、创建监听器类

    @Order(3)
    public class ThirdListener implements ApplicationListener<ApplicationStartedEvent> {
    
    
        @Override
        public void onApplicationEvent(ApplicationStartedEvent event) {
            System.out.println("hello, third listener");
        }
    }
    

      

    2、在application.propeties 文件中配置如下

    3、运行

     第三个监听器Order为3,但是却最早打印出来。原理类似于初始化器。DelegatingApplicationListener类里定义的Order为0

    四、实现方式4

    1、创建监听器类

    @Order(4)
    public class FourthListener implements SmartApplicationListener {
    
    
        @Override
        public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
            return ApplicationStartedEvent.class.isAssignableFrom(eventType) ||
                    ApplicationPreparedEvent.class.isAssignableFrom(eventType);
        }
    
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            System.out.println("hello fourth listener");
        }
    }  

    设置感兴趣的事件为ApplicationStartedEvent和ApplicationPreparedEvent

    2、以追加的方式在application.properties配置

    3、运行

     可以发现打印了两次,因为它对ApplicationStartedEvent和ApplicationPreparedEvent两种事件感兴趣。

  • 相关阅读:
    Python M3 面向对象
    Python 基础
    Python 基础
    Python 基础
    Python 作业
    Python 基础
    Python 基础
    【机器学习】周志华 读书笔记 第三章 线性模型
    【机器学习】周志华 读书笔记 第二章 模型评估与选择
    【机器学习】周志华 读书笔记 第一章 绪论
  • 原文地址:https://www.cnblogs.com/linlf03/p/12332844.html
Copyright © 2011-2022 走看看