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两种事件感兴趣。

  • 相关阅读:
    BZOJ 2260: 商店购物
    BZOJ 4349: 最小树形图
    BZOJ 1115: [POI2009]石子游戏Kam
    BZOJ 1413: [ZJOI2009]取石子游戏
    BZOJ 2275: [Coci2010]HRPA
    BZOJ 4730: Alice和Bob又在玩游戏
    BZOJ 1455: 罗马游戏
    BZOJ 3509: [CodeChef] COUNTARI
    BZOJ 1513: [POI2006]Tet-Tetris 3D
    #大数加减乘除#校赛D题solve
  • 原文地址:https://www.cnblogs.com/linlf03/p/12332844.html
Copyright © 2011-2022 走看看