Во всех главах вы видели, что ядром Spring является ApplicationContext , который управляет полным жизненным циклом bean-компонентов. ApplicationContext публикует определенные типы событий при загрузке бинов. Например, ContextStartedEvent публикуется при запуске контекста, а ContextStoppedEvent публикуется при остановке контекста.
Обработка событий в ApplicationContext обеспечивается через класс ApplicationEvent и интерфейс ApplicationListener . Следовательно, если компонент реализует ApplicationListener , то каждый раз, когда ApplicationEvent публикуется в ApplicationContext, этот компонент уведомляется.
Spring предоставляет следующие стандартные события —
Sr.No. | Весенние встроенные события и описание |
---|---|
1 |
ContextRefreshedEvent Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Это также можно поднять с помощью метода refresh () в интерфейсе ConfigurableApplicationContext . |
2 |
ContextStartedEvent Это событие публикуется, когда ApplicationContext запускается с помощью метода start () в интерфейсе ConfigurableApplicationContext . Вы можете опросить свою базу данных или перезапустить любое остановленное приложение после получения этого события. |
3 |
ContextStoppedEvent Это событие публикуется, когда ApplicationContext останавливается с помощью метода stop () в интерфейсе ConfigurableApplicationContext . Вы можете выполнять необходимую работу по дому после получения этого события. |
4 |
ContextClosedEvent Это событие публикуется, когда ApplicationContext закрывается с помощью метода close () в интерфейсе ConfigurableApplicationContext . Закрытый контекст достигает конца жизни; это не может быть обновлено или перезапущено. |
5 |
RequestHandledEvent Это веб-событие, сообщающее всем компонентам, что HTTP-запрос был обслужен. |
ContextRefreshedEvent
Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Это также можно поднять с помощью метода refresh () в интерфейсе ConfigurableApplicationContext .
ContextStartedEvent
Это событие публикуется, когда ApplicationContext запускается с помощью метода start () в интерфейсе ConfigurableApplicationContext . Вы можете опросить свою базу данных или перезапустить любое остановленное приложение после получения этого события.
ContextStoppedEvent
Это событие публикуется, когда ApplicationContext останавливается с помощью метода stop () в интерфейсе ConfigurableApplicationContext . Вы можете выполнять необходимую работу по дому после получения этого события.
ContextClosedEvent
Это событие публикуется, когда ApplicationContext закрывается с помощью метода close () в интерфейсе ConfigurableApplicationContext . Закрытый контекст достигает конца жизни; это не может быть обновлено или перезапущено.
RequestHandledEvent
Это веб-событие, сообщающее всем компонентам, что HTTP-запрос был обслужен.
Обработка событий Spring является однопоточной, поэтому, если событие опубликовано, до тех пор, пока все получатели не получат сообщение, процессы будут заблокированы, и поток не будет продолжен. Следовательно, следует проявлять осторожность при разработке приложения, если будет использоваться обработка событий.
Прослушивание контекстных событий
Чтобы прослушивать контекстное событие, компонент должен реализовывать интерфейс ApplicationListener, который имеет только один метод onApplicationEvent () . Итак, давайте напишем пример, чтобы увидеть, как события распространяются и как вы можете использовать свой код для выполнения требуемой задачи на основе определенных событий.
Давайте создадим рабочую среду Eclipse и предпримем следующие шаги для создания приложения Spring:
шаг | Описание |
---|---|
1 | Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint в папке src в созданном проекте. |
2 | Добавьте необходимые библиотеки Spring с помощью параметра « Добавить внешние JAR-файлы», как описано в главе « Пример Hello World» . |
3 | Создайте классы Java HelloWorld , CStartEventHandler , CStopEventHandler и MainApp в пакете com.tutorialspoint . |
4 | Создайте файл конфигурации Beans Beans.xml в папке src . |
5 | Последний шаг — создать содержимое всех файлов Java и файла конфигурации Bean и запустить приложение, как описано ниже. |
Вот содержимое файла HelloWorld.java
package com.tutorialspoint; public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); } }
Ниже приводится содержание файла CStartEventHandler.java
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class CStartEventHandler implements ApplicationListener<ContextStartedEvent>{ public void onApplicationEvent(ContextStartedEvent event) { System.out.println("ContextStartedEvent Received"); } }
Ниже приводится содержимое файла CStopEventHandler.java.
package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStoppedEvent; public class CStopEventHandler implements ApplicationListener<ContextStoppedEvent>{ public void onApplicationEvent(ContextStoppedEvent event) { System.out.println("ContextStoppedEvent Received"); } }
Ниже приводится содержание файла MainApp.java
package com.tutorialspoint; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); // Let us raise a start event. context.start(); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage(); // Let us raise a stop event. context.stop(); } }
Ниже приведен файл конфигурации Beans.xml
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld"> <property name = "message" value = "Hello World!"/> </bean> <bean id = "cStartEventHandler" class = "com.tutorialspoint.CStartEventHandler"/> <bean id = "cStopEventHandler" class = "com.tutorialspoint.CStopEventHandler"/> </beans>
Как только вы закончили создавать файлы конфигурации исходного кода и bean-компонента, давайте запустим приложение Если с вашим приложением все в порядке, оно напечатает следующее сообщение:
ContextStartedEvent Received Your Message : Hello World! ContextStoppedEvent Received
При желании вы можете опубликовать свои собственные пользовательские события, а затем вы можете захватить их, чтобы предпринять какие-либо действия против этих пользовательских событий. Если вы заинтересованы в написании собственных пользовательских событий, вы можете проверить пользовательские события весной.