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兩種事件感興趣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM