Spring 监听器

Spring 监听器

监听器是监听某个事件的发生,然后可以调用事件的动作对其进行处理。监听器对应用场景很多,用户的每一个操作都可以被定义为一个事件,通过监听器就能对某些业务场景中的事件进行监听。

主要是ApplicationEventApplicationListener

实现方式

事件

public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source) {
        super(source);
    }

    public void customEvent(){
        System.out.println("定制了自己的事件");
    }
}

监听器

@Component
public class CustomListener implements ApplicationListener<CustomEvent> {
    public void onApplicationEvent(CustomEvent customEvent) {
        customEvent.customEvent();
    }
}

触发事件

@ComponentScan("com.annotation")
public class AnnotationApplication {
   public static void main(String[] args) {
      ApplicationContext context = new AnnotationConfigApplicationContext(AnnotationApplication.class);
      context.publishEvent(new CustomEvent("触发自己定义的事件"));
   }
}

会在刷新容器的时候this.registerListeners();将CustomListener注册到ApplicationListenerBeans中,后面调用的时候就找出来执行onApplicationEvent方法

其实更好的用法是在调用事件时传入某个对象,然后在事件中可以使用getSource()调用到传进来的对象,然后进行处理

Spring 的内置事件

  1. ApplicationStartingEvent:ApplicationStartingEvent在运行开始时发送,但在任何处理之前(监听器和初始化器的注册除外)
  2. ApplicationEnvironmentPreparedEvent:当知道要在上下文中使用的环境时,但在创建上下文之前,将发送ApplicationEnvironmentPreparedEvent
  3. ApplicationContextInitializedEvent:当ApplicationContext准备好并调用ApplicationContextInitializedEvent时,但在加载任何bean定义之前,会发送一个ApplicationContextInitializedEvent
  4. ApplicationPreparedEvent:ApplicationPreparedEvent是在启动刷新之前但在加载bean定义之后发送的
  5. ApplicationStartedEvent:ApplicationStartedEvent在刷新上下文之后发送,但在调用任何应用程序和命令行运行程序之前发送
  6. AvailabilityChangeEvent:一个AvailabilityChangeEvent在LivenessState之后立即被发送。表示应用程序被认为是活动的
  7. ApplicationReadyEvent:在调用任何应用程序和命令行运行程序后,都会发送一个ApplicationReadyEvent
  8. AvailabilityChangeEvent:AvailabilityChangeEvent在ReadinessState之后立即发送。ACCEPTING_TRAFFIC表示应用程序已准备好为请求提供服务
  9. ApplicationFailedEvent:如果启动时出现异常,则发送ApplicationFailedEvent

监听Spring 内置事件

@Component
public class CustomListenApplicationContextInitializedEventListener implements ApplicationListener<ApplicationContextEvent> {
    public void onApplicationEvent(ApplicationContextEvent applicationContextEvent) {
        ApplicationContext applicationContext = applicationContextEvent.getApplicationContext();
        System.out.println("CustomListenApplicationContextInitializedEventListener也监听上ApplicationContextEvent事件了");
    }
}

你可能感兴趣的:(spring,spring,java,后端)