Обработка событий весной
Во всех главах вы видели, что ядро Spring - это ApplicationContext, который управляет полным жизненным циклом бинов. ApplicationContext публикует определенные типы событий при загрузке bean-компонентов. Например, ContextStartedEvent публикуется при запуске контекста, а ContextStoppedEvent публикуется при остановке контекста.
Обработка в случае ApplicationContext обеспечивается через ApplicationEvent класса и ApplicationListener интерфейса. Следовательно, если bean-компонент реализует ApplicationListener , то каждый раз, когда ApplicationEvent публикуется в ApplicationContext, этот bean-компонент уведомляется.
Spring предоставляет следующие стандартные события -
Sr.No. | Встроенные события Spring и описание |
---|---|
1 | ContextRefreshedEvent Это событие публикуется, когда ApplicationContext инициализируется или обновляется. Это также можно поднять с помощью метода refresh () интерфейса ConfigurableApplicationContext . |
2 | ContextStartedEvent Это событие публикуется, когда ApplicationContext запускается с помощью метода start () в интерфейсе ConfigurableApplicationContext . Вы можете опросить свою базу данных или перезапустить любое остановленное приложение после получения этого события. |
3 | ContextStoppedEvent Это событие публикуется, когда ApplicationContext останавливается с помощью метода stop () в интерфейсе ConfigurableApplicationContext . После получения этого события вы можете выполнять необходимую работу по хозяйству. |
4 | ContextClosedEvent Это событие публикуется, когда ApplicationContext закрывается с помощью метода close () в интерфейсе ConfigurableApplicationContext . Закрытый контекст подходит к концу; его нельзя обновить или перезапустить. |
5 | RequestHandledEvent Это веб-событие, сообщающее всем bean-компонентам, что HTTP-запрос был обслужен. |
Обработка событий Spring является однопоточной, поэтому, если событие публикуется, до тех пор, пока все получатели не получат сообщение, процессы блокируются и поток не будет продолжаться. Следовательно, при разработке приложения следует проявлять осторожность, если будет использоваться обработка событий.
Прослушивание контекстных событий
Чтобы прослушивать событие контекста, bean-компонент должен реализовывать интерфейс ApplicationListener, который имеет только один метод.onApplicationEvent(). Итак, давайте напишем пример, чтобы увидеть, как распространяются события, и как вы можете поместить свой код для выполнения требуемой задачи на основе определенных событий.
Разрешите нам иметь рабочую среду IDE Eclipse и предпринять следующие шаги для создания приложения Spring:
Шаг | Описание |
---|---|
1 | Создайте проект с именем SpringExample и создайте пакет com.tutorialspoint подsrc папку в созданном проекте. |
2 | Добавьте необходимые библиотеки Spring с помощью опции « Добавить внешние JAR», как описано в главе « Пример Spring Hello World» . |
3 | Создайте классы Java HelloWorld , CStartEventHandler , CStopEventHandler и MainApp в пакете com.tutorialspoint . |
4 | Создайте файл конфигурации Beans Beans.xml подsrc папка. |
5 | Последним шагом является создание содержимого всех файлов Java и файла конфигурации компонента и запуск приложения, как описано ниже. |
Вот содержание 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
При желании вы можете опубликовать свои собственные события, а позже вы можете записать их, чтобы предпринять какие-либо действия против этих событий. Если вы заинтересованы в написании собственных пользовательских событий, вы можете проверить Custom Events в Spring.