В предыдущей статье мы уже ознакомились с основами обработки стандартных событий в Spring Framework. Но Spring позволяет нам создавать свои собственные события и обрабатывать их.
Для более полного понимания, как именно это работает, рассмотрим пример небольшого приложения.
Пример приложения:
Исходный код проекта можно скачать по ЭТОЙ ССЫЛКЕ.
Структура проекта
Класс MyEvent.java
package net.proselyte.customevent;
import org.springframework.context.ApplicationEvent;
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
@Override
public String toString() {
return "This is event created by me.";
}
}
Класс MyEventHandler.java
package net.proselyte.customevent;
import org.springframework.context.ApplicationListener;
public class MyEventHandler implements ApplicationListener {
@Override
public void onApplicationEvent(MyEvent myEvent) {
System.out.println(myEvent.toString());
}
}
Класс MyEventPublisher.java
package net.proselyte.customevent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
public class MyEventPublisher implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void publishEvent() {
MyEvent myEvent = new MyEvent(this);
publisher.publishEvent(myEvent);
}
}
Конфигурационный файл my-event-config.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="myEventHandler"
class="net.proselyte.customevent.MyEventHandler"/>
<bean id="myEventPublisher"
class="net.proselyte.customevent.MyEventPublisher"/>
</beans>
Класс MyEventRunner.java
package net.proselyte.customevent;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyEventRunner {
public static void main(String[] args) {
ConfigurableApplicationContext context =
new ClassPathXmlApplicationContext("my-event-config.xml");
MyEventPublisher myEventPublisher =
(MyEventPublisher) context.getBean("myEventPublisher");
myEventPublisher.publishEvent();
}
}
Результат работы программы
В этой статье мы ознакомились с основами создания и обработки собственных событий.