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

  • 相关阅读:
    如何自动生成参考文献格式
    VS2010+OpenCV 项目生成EXE文件如何在其他电脑上直接运行
    从多核CPU Cache一致性的应用到分布式系统一致性的概念迁移
    【译】为什么永远都不要使用MongoDB Why You Should Never Use MongoDB
    团队技能提升的二三事儿
    从微信朋友圈的评论可见性,谈因果一致性在分布式系统中的应用
    我所认为的软件可靠性的三重境界
    Redis核心原理与实践--事务实践与源码分析
    Redis核心原理与实践--Redis启动过程源码分析
    选择SaaS平台的那些事
  • 原文地址:https://www.cnblogs.com/linlf03/p/12332844.html
Copyright © 2011-2022 走看看