美文网首页Java 杂谈Spring学习笔记
3-Application事件和监听器

3-Application事件和监听器

作者: 中_中_ | 来源:发表于2018-10-02 15:48 被阅读3次

由于一些事件在ApplicaitonContext创建之前被触发,所以不能通过@Bean注解来注册Listener。可以通过SpringApplication.addListeners(...)方法或则SpringApplicationbuilder.listeners(...)方法注册监听器。

随着应用程序启动,application事件会以如下顺序触发:
1:ApplicationStartingEvent,在程序启动的时候,除处理注册listeners和initializers之前。
2:ApplicationEnvironmentPreparedEvent,在context中档Environment被使用的时候并在context被创建之前。
3:ApplicationPreparedEvent,在bean被加载之后刷新之前触发;
4:ApplicationStaredEvent,在application和command-line调用之后context刷新之前。
5:ApplicationReadyEvent,与4相反,此时应用以具备服务的能力,可以处理请求。
6:ApplicationFailedEvent,在启动过程中如果发生异常则触发。

Application事件的发送使用Spring framework的事件发布机制。该机制可以保证事件发布到注册在子容器当中的listener,也可以发布到注册在父容器当中的listener;所以一个listener会接收到多个相同类型的application事件。

1,使用配置文件的方式注册listener
1)实现org.springframework.context.ApplicationListener接口

public class MyListeners implements ApplicationListener<ApplicationEvent> {

   @Override
   public void onApplicationEvent(ApplicationEvent arg0) {
       // TODO Auto-generated method stub
       System.out.println(arg0.getSource() + "happends on " +arg0.getTimestamp());
   }
}

2)使用maven命令打包成可执行jar包,添加文件META-INF/spring.factories,文件内容如下:

org.springframework.context.ApplicationListener=com.zhongzhong.demo.myListener.MyListeners

3)使用“java -jar text.jar”运行,可以看到事件的输出信息:


image.png

2,使用SpringApplication.addListener(...)方式添加
1)实现org.springframework.context.ApplicationListener接口

public class MyListennerByAddedToApplication implements ApplicationListener<ApplicationEvent>{

    @Override
    public void onApplicationEvent(ApplicationEvent arg0) {
        // TODO Auto-generated method stub
        if(arg0.getClass().isAssignableFrom(ApplicationStartingEvent.class)){
            
            System.out.println(this.getClass()+" ApplicationStartEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationEnvironmentPreparedEvent.class)){
            
            System.out.println(this.getClass()+" ApplicationEnvironmentPreparedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationPreparedEvent.class)){
            
            System.out.println(this.getClass()+" ApplicationPreparedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationStartedEvent.class)){
            System.out.println(this.getClass()+" ApplicationStartedEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationReadyEvent.class)){
            
            System.out.println(this.getClass()+" ApplicationReadyEvent hapends");
        }else if(arg0.getClass().isAssignableFrom(ApplicationFailedEvent.class)){
            
            System.err.println(this.getClass()+" exception happends");
        }
    }
}

2)在main方法中添加listener

public static void main(String[] args) {
        
        SpringApplication application = new SpringApplication(SpringbootDemoApplication.class);
        //application.setBanner(new MyBanner());
        application.addListeners(new MyListennerByAddedToApplication());
        application.run(args);
        
    }

3)打包运行,运行结果如下:


image.png
image.png

相关文章

  • 3-Application事件和监听器

    由于一些事件在ApplicaitonContext创建之前被触发,所以不能通过@Bean注解来注册Listener...

  • 事件

    事件 -- 监听器 -- 文章点击率 Laravel 5.3 事件 和 监听器 事件类 存放位置:一般在 app/...

  • day08

    监听器和邮箱服务 第1章 监听器介绍 监听器:监听事件源,根据事件源上发生事件,做出相应的处理。 1.2 监听机制...

  • Web笔记-Listener

    事件源、事件、监听器 事件源:发生事件的对象 事件:事件封装了事件源,方便监听器的某个方法获取到事件源对象 监听器...

  • 基于SpringBoot和注解实现优雅的事件监听器

    1. 了解事件监听器 事件监听器包括3个部分,事件、事件源、事件监听器。 事件,主要用于传递参数,例如用户登录,可...

  • laravel Event 事件使用

    Event的使用主要分为三步: ①注册事件监听器映射关系 ②定义监听器 ③触发事件 ①注册事件监听器映射关系 在a...

  • 事件委托

    使用事件委托技术能让你避免对特定的每个节点添加事件监听器;相反,事件监听器是被添加到它们的父元素上。事件监听器会分...

  • SpringBoot--监听器解析

    监听器模式 监听器模式有要素 事件 监听器 广播器 触发机制 系统监听器 监听器 ApplicationListe...

  • 监听器

    监听器 为了能够在 Servlet 应用程序中进行事件驱动编程,Servlet API 提供了一整套事件类和监听器...

  • 5.4Laravel事件

    事件 更多详细请参看laravel手册 事件/监听器 事件类存放位置:app/Event 目录中 监听器存放位置:...

网友评论

    本文标题:3-Application事件和监听器

    本文链接:https://www.haomeiwen.com/subject/bprroftx.html