SpringBoot的多种事件监听机制()

  本篇文章为你整理了SpringBoot的多种事件监听机制()的详细内容,包含有 SpringBoot的多种事件监听机制,希望能帮助你了解 SpringBoot的多种事件监听机制。

  # ApplicationContextInitializer

  org.springframework.context.ApplicationContextInitializer=com.test.springbootdemo.eventListeners.MyApplicationContextInitializer

  # ApplicationListener

  org.springframework.context.ApplicationListener=com.test.springbootdemo.eventListeners.MyApplicationListener

  # SpringApplicationRunListener

  org.springframework.boot.SpringApplicationRunListener=com.test.springbootdemo.eventListeners.MySpringApplicationRunListener

 

 

  

  ApplicationContextInitializer接口

  代码示例

  

public class MyApplicationContextInitializer implements ApplicationContextInitializer {

 

   //run方法this.prepareContext触发

   //进一步则是this.applyInitializers

   //在进一步则是initializer.initialize(context);

   @Override

   public void initialize(ConfigurableApplicationContext applicationContext) {

   System.out.println("ApplicationContextInitializer.....initialize");

  }

 

  说明

   1.由于触发阶段在于准备容器的时候,所以添加@Component注解是不会起作用的,应为@Component注解需要在容器刷新时候才会起到作用。

  

  ApplicationListener接口

  代码示例

  

public class MyApplicationListener implements ApplicationListener {

 

   //run方法listeners.starting,触发第一次

   //run方法this.prepareEnvironment,触发第二次

   //即进一步,listeners.environmentPrepared

   //run方法this.prepareContext,触发第三次与触发第四次

   //进一步则是listeners.contextPrepared(context);触发第三次

   // listeners.contextLoaded(context);触发第四次

   @Override

   public void onApplicationEvent(ApplicationEvent event) {

   if (event instanceof ContextStartedEvent){

   System.out.println("ContextStartedEvent1.....run()");

   System.out.println("Event1.....run()");

  @Component

  public class MyApplicationListener2 implements ApplicationListener {

   //容器refresh()的时候触发

   //进一步finishRefresh();

   //再进一步getLifecycleProcessor().onRefresh();

   @Override

   public void onApplicationEvent(ApplicationEvent event) {

   if (event instanceof ContextStartedEvent){

   System.out.println("ContextStartedEvent2.....run()");

   System.out.println("Event2.....run()");

  }

 

  说明

   1.存在两种注册方式:

   1)@Component注解注册,这种需要在容器刷新后的finishRefresh()方法里面触发,然后监听到全部事件

   2)配置文件注册,这种会在SpringBoot中开启listeners,让listeners准备环境,准备容器等都会触发。包括容器刷新后的finishRefresh()方法里面都会触发【包括了注解修饰的部分】

  

  ApplicationRunner接口

  代码示例

  

@Component

 

  public class MyApplicationRunner implements ApplicationRunner {

   //run方法this.callRunners,第一次触发

   //进一步,this.callRunner

   //在进一步,runner.run(args);

   @Override

   public void run(ApplicationArguments args) throws Exception {

   System.out.println("ApplicationRunner.....run()");

  }

 

  说明

   1.这种只能在容器启动后进行触发

   2.与CommandLineRunner接口其实并没有很大差别,都在同一个方法内被调用,调用同一个触发方法。但是会优于CommandLineRunner被调用。

  

  CommandLineRunner接口

  代码示例

  

@Component

 

  public class MyCommandLineRunner implements CommandLineRunner {

   //run方法this.callRunners,第一次触发

   //进一步,this.callRunner

   //在进一步,runner.run(args);

   @Override

   public void run(String... args) throws Exception {

   System.out.println("CommandLineRunner.....run()");

  }

 

  说明

   1.这种只能在容器启动后进行触发

   2.与ApplicationRunner接口其实并没有很大差别,都在同一个方法内被调用,调用同一个触发方法。但是会晚于ApplicationRunner被调用。

  

  SpringApplicationRunListener接口

  代码示例

  

public class MySpringApplicationRunListener implements SpringApplicationRunListener {

 

   public MySpringApplicationRunListener(SpringApplication springApplication, String[] arg) {

   //run方法listeners.starting触发

   @Override

   public void starting(ConfigurableBootstrapContext bootstrapContext) {

   System.out.println("SpringApplicationRunListener.....starting()");

   //run方法this.prepareEnvironment触发

   //进一步listeners.environmentPrepared

   @Override

   public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {

   System.out.println("SpringApplicationRunListener.....environmentPrepared()");

   //run方法this.prepareContext触发

   //进一步listeners.contextPrepared(context);

   @Override

   public void contextPrepared(ConfigurableApplicationContext context) {

   System.out.println("SpringApplicationRunListener.....contextPrepared()");

   //run方法this.prepareContext触发

   //进一步listeners.contextLoaded(context);

   @Override

   public void contextLoaded(ConfigurableApplicationContext context) {

   System.out.println("SpringApplicationRunListener.....contextLoaded()");

   //run方法listeners.started(context, timeTakenToStartup);触发

   @Override

   public void started(ConfigurableApplicationContext context, Duration timeTaken) {

   System.out.println("SpringApplicationRunListener.....started()");

   @Override

   public void started(ConfigurableApplicationContext context) {

   System.out.println("SpringApplicationRunListener.....started()");

   //run方法listeners.ready(context, timeTakenToReady);触发

   @Override

   public void ready(ConfigurableApplicationContext context, Duration timeTaken) {

   System.out.println("SpringApplicationRunListener.....ready()");

   @Override

   public void running(ConfigurableApplicationContext context) {

   System.out.println("SpringApplicationRunListener.....running()");

   @Override

   public void failed(ConfigurableApplicationContext context, Throwable exception) {

   System.out.println("SpringApplicationRunListener.....failed()");

  }

 

  说明

   1.这个比较有意思在容器Refresh()前后都会触发,包括各种处理环境,准备容器等步骤。

  以上就是SpringBoot的多种事件监听机制()的详细内容,想要了解更多 SpringBoot的多种事件监听机制的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: