SpringBoot使用四种方式实现事件监听

一、监听事件包含四个步骤

  (1)自定义事件

  (2)自定义监听器

  (3)使Spring容器获取到监听器(4种方式)

  (4)发布事件

二、演示四种实现方式

  1、启动方法中添加监听

  1)自定义事件

public class MyApplicationEvent extends ApplicationEvent {

    public MyApplicationEvent(Object source) {
        super(source);
    }
}

  2)自定义监听器

public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> {

    public void onApplicationEvent(MyApplicationEvent event) {
        System.out.println("接收到事件:"+event.getClass());
    }
}

  3)添加监听、4)发布事件

public static void main(String[] args) {
    SpringApplication app=new SpringApplication(App.class);
    app.addListeners(new MyAppilcationListener());//添加监听
    ConfigurableApplicationContext context=app.run(args);
    context.publishEvent(new MyApplicationEvent(new Object()));//发布事件
}

  2、启动方法中不添加监听,监听类上添加@Component注解

  1)自定义事件(同上)

  2)自定义监听、3)添加监听

@Component
public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> {

    public void onApplicationEvent(MyApplicationEvent event) {
        System.out.println("接收到事件:"+event.getClass());
    }
}

  4)发布事件

public static void main(String[] args) {
    SpringApplication app=new SpringApplication(App.class);
    ConfigurableApplicationContext context=app.run(args);
    context.publishEvent(new MyApplicationEvent(new Object()));//发布事件
}

  3、配置文件中添加context.listener.classes属性

  1)自定义事件(同上)

  2)自定义监听

public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> {

    public void onApplicationEvent(MyApplicationEvent event) {
        System.out.println("接收到事件:"+event.getClass());
    }
}

  3)添加监听,application.properties里面设置

context.listener.classes=com.leiyuke.configuration.bean1.MyAppilcationListener

  4)发布事件

public static void main(String[] args) {
  SpringApplication app=new SpringApplication(App.class);
  ConfigurableApplicationContext context=app.run(args);
  context.publishEvent(new MyApplicationEvent(new Object()));//发布事件
}

  4、使用注解监听事件(推荐

  1)自定义事件(同上)

  2)自定义监听、3)添加监听

@Component
public class AA  {

    @EventListener
    public void aa(MyApplicationEvent event) {
        System.out.println("接收到事件:"+event.getClass());
    }
}

  4)发布事件

public static void main(String[] args) {
    SpringApplication app=new SpringApplication(App.class);
    ConfigurableApplicationContext context=app.run(args);
    context.publishEvent(new MyApplicationEvent(new Object()));//发布事件
}

三、Spring中的自定义事件

  Spring中定义了许多事件,使用时不需要发布,下面举例ContextStoppedEvent(其他事件在同一包下)事件的使用

  1)自定义事件(不需要)

  2)自定义监听、3)添加监听

@Component
public class BB {

    @EventListener
    public void bb(ContextStoppedEvent event) {
        System.out.println("接收到事件:"+event.getClass());
    }
}

  4)发布事件(不需要)

  测试:调用stop方法时触发 ContextStoppedEvent 事件,输出内容

public static void main(String[] args) {
    SpringApplication app=new SpringApplication(App.class);
    ConfigurableApplicationContext context=app.run(args);
    context.stop();
}

 

posted @ 2019-11-21 22:43  雷雨客  阅读(1293)  评论(0编辑  收藏  举报