Глубокое понимание механизма уведомления о событиях Spring.
Глубокое понимание механизма уведомления о событиях Spring.

   Будучи превосходной средой разработки приложений корпоративного уровня, Spring не только предоставляет множество функциональных модулей и инструментов, но также предоставляет гибкий и эффективный механизм уведомления о событиях для управления слабосвязанным обменом данными между компонентами. В этой статье будет подробно описан принцип Spring. механизма уведомления о событий, методов использования и примеров. Я надеюсь, что это будет полезно для более глубокого понимания фреймворка Spring.

Принцип механизма уведомления о событиях

   Механизм уведомления о событиях Spring реализован на основе шаблона наблюдателя и в основном разделен на три основных элемента: события, прослушиватели и издатели событий.

  1. событие(ApplicationEvent) ˆ Событие Spring реализовано на основе класса ApplicationEvent.,Этот класс наследует абстрактный класс EventObject, предоставленный JDK.,Может использоваться для представления данных о событии. Весной,Если вы хотите настроить событие,Просто унаследуйте класс ApplicationEvent.,И добавьте собственные свойства или методы в подклассы. Например,Класс MyEvent может быть определен для представления пользовательского события.,Он может содержать некоторые данные для обработки.
  2. Прослушиватель (прослушиватель приложения)    Весной,Вы можете определить прослушиватель, реализовав интерфейс ApplicationListener.,Интерфейс ApplicationListener определяет только один метод onApplicationEvent.,Этот метод будет вызываться при возникновении определенного события,В нем можно обрабатывать содержимое событий. кроме,Spring также предоставляет более простой метод,Просто используйте аннотацию @EventListener,Просто добавьте эту аннотацию в метод реализации.
  3. событиеиздатель(ApplicationContext)    Контейнер Spring является издателем событий. Это означает, что в ApplicationContext при возникновении определенного события контейнер автоматически вызывает соответствующий прослушиватель. Конкретная реализация осуществляется через вещателя событий. Его ядром является использование класса ApplicationEventMulticaster механизма публикации событий Spring, который отвечает за поддержку всех прослушивателей и уведомление о событии всех слушателей через транслятор событий.

  При запуске ApplicationContext экземпляр этого класса будет автоматически создан и зарегистрирован в контейнере как одноэлементный компонент, который будет уничтожен при закрытии контейнера. В целом механизм уведомления о событиях Spring обеспечивает слабосвязанную связь путем определения событий, прослушивателей и издателей событий, уменьшая зависимости между компонентами и делая приложения более гибкими.

Как использовать механизм уведомления о событиях

  Использование событий Spring очень просто и может быть достигнуто с помощью следующих трех шагов:

  1. Определите классы событий: разработчики могут настраивать объекты событий.,Наследовать класс ApplicationEvent Spring,Реализовать логику построения и обработки события.
  2. Определить прослушиватель событий: разработчики могут реализовать интерфейс ApplicationListener.,И определите метод onApplicationEvent в соответствующем классе для обработки полученного события.,Реализовать функцию прослушивателя событий.
  3. Регистрация прослушивателя. Разработчики могут зарегистрировать прослушиватель в контейнере Spring, настроив его в файле конфигурации или используя аннотацию @EventListener, чтобы Spring мог управлять жизненным циклом прослушивателя и автоматически использовать его.

Ниже приведен пример кода простого механизма уведомления о событиях Spring:

Сначала определите класс событий MyEvent.java:

Язык кода:java
копировать
import org.springframework.context.ApplicationEvent;

public class MyEvent extends ApplicationEvent {
    private String message;

    public MyEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

Определите прослушиватель событий MyListener.java:

Язык кода:java
копировать
import org.springframework.context.ApplicationListener;

@Component
public class MyListener implements ApplicationListener<MyEvent> {

    @Override
    public void onApplicationEvent(MyEvent myEvent) {
        System.out.println("Received MyEvent: " + myEvent.getMessage());
    }
}

Определите класс публикации событий MyPublisher.java:

Язык кода:java
копировать
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class MyPublisher {
    @Autowired
    private ApplicationEventPublisher publisher;

    public void publish() {
        MyEvent event = new MyEvent(this, "Hello, world!");
        publisher.publishEvent(event);
    }
}

  Когда Spring запущен, вызов myPublisher.publish() в любом месте выведет сообщение «Received MyEvent: Hello, world!», что указывает на то, что пользовательское событие было успешно получено прослушивателем.

Подвести итог

   Механизм уведомления о событиях Spring — это гибкий и удобный метод взаимодействия компонентов, который широко используется в различных бизнес-сценариях. Из этой статьи мы узнаем о Принципе Spring. механизма уведомления о событий, примеры использования и кода, а также несколько советов по интеграции с другими компонентами Spring. Я надеюсь, что эта статья поможет каждому глубже понять структуру Spring.

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]