Spring – 16 – ApplicationEvent & ApplicationListener

Merhaba Arkadaslar
Bu bolumde ApplicationEvent sinifi ve ApplicationListener arabirimini inceleyecegiz.

org.springframework.context.ApplicationEvent sinifi java.util.EventObject sinifini kalitmaktadir.

MessageEvent.java

package _21.application.event.model;

import org.springframework.context.ApplicationEvent;

public class MessageEvent extends ApplicationEvent {

	private static final long serialVersionUID = 1L;

	private String message;

	public MessageEvent(Object source, String message) {
		super(source);
		System.out.println("MessageEvent constructor...");
		this.message = message;
	}

	public String getMessage() {
		return message;
	}

	@Override
	public String toString() {
		return "MessageEvent [message=" + message + "]";
	}

}

Kodu inceleyecek olursak ApplicationEvent sinifini kalitiyoruz. ApplicationEvent sinifinda sadece bir tane yapilandirici vardir.
Dolayisiyla ilgili yapilandiriciyi cagiracak sekilde bir yapilandirici olusturmamiz gereklidir.

	public ApplicationEvent(Object source) {
		super(source);
		this.timestamp = System.currentTimeMillis();
	}

Simdi de ApplicationEventListener arabirimini uygulayan sinifimizi yazalim.
ApplicationListener arabiriminde onApplicationEvent metodu yer almaktadir. Bu metodu override ediyoruz. Generic taniminda MessageEvent sinifini yaziyoruz.

....
public interface ApplicationListener extends EventListener {

    void onApplicationEvent(E event);

}

MessageEventListener.java

package _21.application.event.service;

import org.springframework.context.ApplicationListener;

import _21.application.event.model.MessageEvent;

public class MessageEventListener implements ApplicationListener<MessageEvent> {

	@Override
	public void onApplicationEvent(MessageEvent event) {

		MessageEvent messageEvent = (MessageEvent) event;
		System.out.println("Message Received : " + messageEvent.getMessage());

	}

}

onApplicationEvent metodu Spring tarafindan ilgili event ortaya ciktiginda (MessageEvent)calisacaktir.

Spring’in onApplicationEvent metodunu cagirabilmesi icin bean tanimi yapmamiz gereklidir.

21.applicationEvent.xml

...
<bean id="messageEventListener" class="_21.application.event.service.MessageEventListener" />
...

ApplicationContext arabirimi ApplicationEventPublisher arabirimini kalitmaktadir.
Bu arabirimde publishEvent metodu yer alir. publishEvent metoduna arguman olarak MessageEvent objesini verdigimizde MessageEventListener da yer alan onApplicationEvent metodu calisacaktir.

MessageEventTest.java

package _21.application.event.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import _21.application.event.model.MessageEvent;

public class MessageEventTest {
	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("21.applicationEvent.xml");

		ctx.publishEvent(new MessageEvent(new Object(), "Message 1!"));
		ctx.publishEvent(new MessageEvent(new Object(), "Message 2!"));
		ctx.publishEvent(new MessageEvent(new Object(), "Message 3!"));
		
		((ClassPathXmlApplicationContext) ctx).close();

	}
}

Ornegimizi calistirdigimizda ;

MessageEvent constructor...
Message Received : Message 1!
MessageEvent constructor...
Message Received : Message 2!
MessageEvent constructor...
Message Received : Message 3!

Github kaynak dosyalar/ source folder
leventerguder/injavawetrust-spring-tutorial

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *