打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【SpringBoot】SpringBoot 事件监听机制(十六)

  本例介绍SpringBoot的事件监听机制及使用

  主要有ApplicationContextInitializer(上下文初始化器)、SpringApplicationRunListener(Spring应用运行监听器)、ApplicationRunner(启动加载类)、CommandLineRunner(启动加载类)

  关于调用流程参考【SpringBoot】SpringBoot 启动原理(十五)

ApplicationContextInitializer(上下文初始化器)

  1、新建一个SpringBoot Web项目

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5     <modelVersion>4.0.0</modelVersion> 6  7     <groupId>com.test</groupId> 8     <artifactId>test-springboot-runner</artifactId> 9     <version>1.0-SNAPSHOT</version>10 11     <parent>12         <groupId>org.springframework.boot</groupId>13         <artifactId>spring-boot-starter-parent</artifactId>14         <version>2.1.8.RELEASE</version>15     </parent>16 17     <properties>18 19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>20         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>21         <java.version>1.8</java.version>22     </properties>23 24     <dependencies>25 26         <dependency>27             <groupId>org.springframework.boot</groupId>28             <artifactId>spring-boot-starter-web</artifactId>29         </dependency>30 31 32         <dependency>33             <groupId>org.springframework.boot</groupId>34             <artifactId>spring-boot-starter-test</artifactId>35             <scope>test</scope>36         </dependency>37 38     </dependencies>39 40 41     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->42     <build>43         <plugins>44             <plugin>45                 <groupId>org.springframework.boot</groupId>46                 <artifactId>spring-boot-maven-plugin</artifactId>47             </plugin>48         </plugins>49     </build>50 51 </project>
View Code

  2、新建HelloApplicationContextInitializer类,实现ApplicationContextInitializer接口,如下:

 1 package com.test.springboot.listener; 2  3 import org.springframework.context.ApplicationContextInitializer; 4 import org.springframework.context.ConfigurableApplicationContext; 5  6 public class HelloApplicationContextInitializer implements ApplicationContextInitializer { 7     @Override 8     public void initialize(ConfigurableApplicationContext applicationContext) { 9         System.out.println("====HelloApplicationContextInitializer======initialize:"   applicationContext);10     }11 }

  3、将HelloApplicationContextInitializer加入SpringBoot中,在resources目录下新建文件META-INF/spring.factories,添加一下内容

1 # Initializers2 org.springframework.context.ApplicationContextInitializer=3 com.test.springboot.listener.HelloApplicationContextInitializer

  4、启动SpringBoot程序,查看控制台

    

SpringApplicationRunListener(Spring应用运行监听器)

  1、在SpringBoot Web项目中,新建HelloSpringApplicationRunListener类,实现SpringApplicationRunListener接口

 1 package com.test.springboot.listener; 2  3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.SpringApplicationRunListener; 5 import org.springframework.context.ConfigurableApplicationContext; 6 import org.springframework.core.env.ConfigurableEnvironment; 7  8 public class HelloSpringApplicationRunListener implements SpringApplicationRunListener { 9 10     public HelloSpringApplicationRunListener(SpringApplication application, String[] args) {11 12     }13 14     @Override15     public void starting() {16         System.out.println("===HelloSpringApplicationRunListener===starting");17     }18 19     @Override20     public void environmentPrepared(ConfigurableEnvironment environment) {21         System.out.println("===os.name:"   environment.getSystemProperties().get("os.name") );22         System.out.println("===HelloSpringApplicationRunListener===environmentPrepared");23     }24 25     @Override26     public void contextPrepared(ConfigurableApplicationContext context) {27         System.out.println("===HelloSpringApplicationRunListener===contextPrepared");28     }29 30     @Override31     public void contextLoaded(ConfigurableApplicationContext context) {32         System.out.println("===HelloSpringApplicationRunListener===contextLoaded");33     }34 35     @Override36     public void started(ConfigurableApplicationContext context) {37         System.out.println("===HelloSpringApplicationRunListener===started");38     }39 40     @Override41     public void running(ConfigurableApplicationContext context) {42         System.out.println("===HelloSpringApplicationRunListener===running");43     }44 45     @Override46     public void failed(ConfigurableApplicationContext context, Throwable exception) {47         System.out.println("===HelloSpringApplicationRunListener===failed");48     }49 }

    注意:HelloSpringApplicationRunListener必须添加构造方法,否则会包如下错误

    

    HelloSpringApplicationRunListener的构造方法编写,可以参考SpringApplicationRunListener的其他实现类,如:EventPublishingRunListener

 1 public class EventPublishingRunListener implements SpringApplicationRunListener, Ordered { 2  3     private final SpringApplication application; 4  5     private final String[] args; 6  7     private final SimpleApplicationEventMulticaster initialMulticaster; 8  9     public EventPublishingRunListener(SpringApplication application, String[] args) {10         this.application = application;11         this.args = args;12         this.initialMulticaster = new SimpleApplicationEventMulticaster();13         for (ApplicationListener<?> listener : application.getListeners()) {14             this.initialMulticaster.addApplicationListener(listener);15         }16     }17 18     ...19 20 }

  2、将HelloSpringApplicationRunListener加入SpringBoot中,在resources目录下新建文件META-INF/spring.factories,添加一下内容

1 # Run Listeners2 org.springframework.boot.SpringApplicationRunListener=3 com.test.springboot.listener.HelloSpringApplicationRunListener

  3、测试启动SpringBoot程序,查看控制台

    

ApplicationRunner(启动加载类)

  1、在SpringBoot Web项目中,新建HelloApplicationRunner类,实现接口 ApplicationRunner

1 @Component2 public class HelloApplicationRunner implements ApplicationRunner {3     @Override4     public void run(ApplicationArguments args) throws Exception {5         System.out.println("===HelloApplicationRunner===run");6     }7 }

  2、需要在HelloApplicationRunner类上加上注解@Component

  3、启动SpringBoot项目,查看是否在启动时,调用了run方法

    

CommandLineRunner(启动加载类)

  1、在SpringBoot Web项目中,新建HelloCommandLineRunner类,实现接口 CommandLineRunner

1 @Component2 public class HelloCommandLineRunner implements CommandLineRunner {3     @Override4     public void run(String... args) throws Exception {5         System.out.println("===HelloCommandLineRunner===run:"   Arrays.asList(args));6     }7 }

 

  2、需要在HelloCommandLineRunner类上加上注解@Component

  3、启动SpringBoot项目,查看是否在启动时,调用了run方法

    

  4、同时注入ApplicationRunner和CommandLineRunner,ApplicationRunner先回调,CommandLineRunner再回调

 

 

 

 

 

  

来源:https://www.icode9.com/content-4-652651.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
探究SpringBoot启动时实现自动执行代码
SpringBoot各类扩展点解析
SpringBoot:使用小技巧合集
ES7SpringDataElasticsearch配置 最完整的springboot2.2.x.RELEASE整合springDataElasticsearch Elasticsearch7.6.x 版本
springboot(十一):Spring boot中mongodb的使用
spring boot-aop的使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服