欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springBoot的事件机制GenericApplicationListener用法解析

程序员文章站 2022-06-30 09:49:28
什么是applicationcontext? 它是spring的核心,context我们通常解释为上下文环境,但是理解成容器会更好些。 application...

什么是applicationcontext?

它是spring的核心,context我们通常解释为上下文环境,但是理解成容器会更好些。 applicationcontext则是应用的容器。
spring把bean(object)放在容器中,需要用就通过get方法取出来。

applicationevent

  • 是个抽象类,里面只有一个构造函数和一个长整型的timestamp。
  • springboot的event的类型:
    • applicationstartingevent
    • applicationenvironmentpreparedevent
    • applicationcontextinitializedevent
    • applicationpreparedevent
    • contextrefreshedevent
    • servletwebserverinitializedevent
    • applicationstartedevent
    • applicationreadyevent

applicationlistener

是一个接口,里面只有一个onapplicationevent方法。所以自己的类在实现该接口的时候,要实现该方法。

applicationlistener的封装类

  • genericapplicationlistener
  • genericapplicationlisteneradapter
  • smartapplicationlistener

关系

如果在上下文中部署一个实现了applicationlistener接口的bean,那么每当在一个applicationevent发布到 applicationcontext时,这个bean得到通知。其实这就是标准的oberver设计模式。

注意

要配置meta-inf/spring.factories文件,并在文件中实现

使用

// 第一种方式
public class aiinfluxdbapplicationlistener implements genericapplicationlistener {
  @override
  public int getorder() {
    return ordered.lowest_precedence;
  }
  @override
  public boolean supportseventtype(resolvabletype eventtype) {
    return applicationreadyevent.class.isassignablefrom(eventtype.getrawclass());
  }
  @override
  public void onapplicationevent(applicationevent event) {
    system.out.print("here is applicationreadyevent");
  }
}
//第二种方式
public class configapplicationlistener implements applicationlistener<applicationenvironmentpreparedevent>, ordered {
  @override
  public int getorder() {
    return highest_precedence;
  }
  @override
  public void onapplicationevent(applicationenvironmentpreparedevent event) {

  }
}
//meta-inf/spring.factories文件定义
org.springframework.context.applicationlistener=\
com.demotest.core.applicationstartlistener

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。