Springboot事件监听器的使用


Springboot事件监听器的基本使用:

第一种情况:

上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext被初始化或者更新时发布。也可以在调用ConfigurableApplicationContext接口中的refresh()方法时被触发。
@Component
public class LearnListener implements ApplicationListener {


  @Override
  public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
    //获取所有的bean
    String[] definitionNames = contextRefreshedEvent.getApplicationContext().getBeanDefinitionNames();
    System.out.println(definitionNames.length);
  }
}

第二种:自定义事件监听器:

首先是:监听的活动类。

public class MyApplicationEvent extends ApplicationEvent {

  private Integer id;


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

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  @Override
  public String toString() {
    return "MyApplicationEvent{" +
        "id=" + id +
        '}';
  }
}

然后是事件监听器的类:

@Component
public class MyListener implements ApplicationListener {

  @Override
  public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
    System.out.println("监听到的事件:"+myApplicationEvent.toString());
  }
}

最后:

如果需要启动事件监听器怎么办?

在需要使用的地方注入

        @Resource
    private ApplicationContext applicationContext;

    @Autowired
    protected ApplicationEventPublisher eventPublisher;

    @Test
    void contextLoads() {
        MyApplicationEvent myApplicationEvent = new MyApplicationEvent("myEvent");

        myApplicationEvent.setId(1);
        eventPublisher.publishEvent(myApplicationEvent);
        applicationContext.publishEvent(myApplicationEvent);

    }    
两种方式都可以启动事件监听器。