События контейнера Spring Core Series

задняя часть Spring API Kafka

События контейнера Spring Core Series

Привет всем, в предыдущих статьях Spring примерно рассказывалось о контейнере Spring, создании контейнера, Bean-компонентах в контейнере, а в следующей статье будет рассказано об АОП, в этой закажем несколько закусок, Говоря о событиях контейнера Spring, в этой знания не очень широко используются. Зачем?Поскольку, как правило, распределены более крупные системы, они не будут использовать связь в локальных проектах, а MQ также используется для связи., но так как я написал серию блогов Spring, я все равно делюсь ею с вами. Хорошо, старая дискуссия, структура статьи:

  1. Встроенные события в Spring
  2. Как настроить события в Spring

1. Встроенные события в Spring

Когда дело доходит до событий, на самом деле многие компоненты фреймворка имеют свои собственные механизмы событий.С точки зрения макросов уведомление в JDK на самом деле является событием, которое может уведомлять ожидающие потоки. Вот вам картинка, а тут прямо в тему врубайтесь, чтобы рассказать о встроенных событиях в Spring:

  • Источником событий, особенно в Spring, является ApplicationContext.
  • События, встроенные события или определить собственную реализацию (реализовать интерфейс ApplicationEvent для реализации).
  • Event Broadcaster: Spring реализует сам себя, нам все равно.
  • Реестр прослушивателей событий: Spring реализует сам себя, нам все равно.
  • Слушатель: Разработчик реализует это, и можно внедрить его в контейнер Spring. (реализовать интерфейс AoolicationListener для реализации)

Ну, это на самом деле очень просто, а затем дайте диаграмму наследования событий Spring внутри Spring:

Все события в Spring наследуются от ApplicationEvent,Встроенные события — ContextClosedEvent, ContextRefreshEvent, ContextStartedEvent, ContextStoppedEvent и ServletRequestHandledEvent — представляют события запуска контейнера, выключения, обновления, прерывания и события завершения службы запросов.

Затем приведите пример для демонстрации встроенных событий:

public class ContextStopListener 
   implements ApplicationListener<ContextStoppedEvent>{
   public void onApplicationEvent(ContextStoppedEvent event) {
      System.out.println("ContextStoppedEvent Received");
   }
}

Просто введите этот класс в Spring, чтобы он стал компонентом Bean. Когда контейнер закрывается, вызывается onApplicationEvent...

2. Как настроить события в Spring

Как вы можете видеть выше, для встроенных событий нам нужно только настроить прослушиватель и поместить его в контейнер Spring. Так что насчет пользовательских событий, давайте посмотрим на пример:

public class ZdyEvent extends ApplicationEvent {

    private String whatsHasspend;

    public ZdyEvent(Object source,String whatsHasspend) {
        super(source);
        this.whatsHasspend=whatsHasspend;
    }

    public String getWhatsHasspend() {
        return whatsHasspend;
    }

    public void setWhatsHasspend(String whatsHasspend) {
        this.whatsHasspend = whatsHasspend;
    }
}

public class ZdyListener implements ApplicationListener<ZdyEvent> {
    @Override
    public void onApplicationEvent(ZdyEvent zdyEvent) {
        System.out.println("事件接收器接收到了Event:"+zdyEvent.getWhatsHasspend());
    }
}

Затем наш основной:

    public static void main( String[] args )
    {

        ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext.xml");
        ZdyEvent event =new ZdyEvent(ac,"我发送了一个事件:我吃了一个苹果..");
        ac.publishEvent(event);
    }

Распечатать:

事件接收器接收到了Event:我发送了一个事件:我吃了一个苹果..

Уведомление,После определения прослушивателей событий и времени вам нужно поместить прослушиватель событий (ZdyListener) в контейнер. И наш класс события (ZdyEvent) не нужно помещать в контейнер.

Эпилог

Ну, на самом деле, как было сказано ранее, механизм событий Spring очень мощный, но в модуле Spring текущего проекта он не подходит для кластеризации, а во-вторых, не подходит для распределения. Так что, грубо говоря, это подставка для цветов. Все только для информации. Будь то кластер или распределенная коммуникация, этот материал точно не используется.В основном это распределенные компоненты, такие как Mq, zk и kafka.Тем, кто делал системную архитектуру, должно быть понятнее. Эта статья тоже упоминается попутно, грубо говоря.Over,Have a good day .