Руководство по Spring. Создание собственных событий.

В предыдущей статье мы уже ознакомились с основами обработки стандартных событий в Spring Framework. Но Spring позволяет нам создавать свои собственные события и обрабатывать их.

Для более полного понимания, как именно это работает, рассмотрим пример небольшого приложения.

Пример приложения:

Исходный код проекта можно скачать по ЭТОЙ ССЫЛКЕ.

Структура проекта

eventHandlerStructure

Класс 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();
    }
}

Результат работы программы

myEventResult

В этой статье мы ознакомились с основами создания и обработки собственных событий.