Spring 通過ApplicationListener&ApplicationEvent實現事件監聽

實現了ApplicationListener接口的bean,每當一個ApplicationEvent發佈到ApplicationContext時,該Listener  bean將得到通知。這是標準的觀察者模式


示例:

import org.springframework.context.ApplicationEvent;

public class MyEvent extends ApplicationEvent {

	private static final long serialVersionUID = -155227031531674679L;

	private String msg;

	public MyEvent(String msg) {
		super(msg);
		this.msg = msg;
	}

	public void myevent() {
		System.out.println("輪到我了");
		System.out.println(msg);
		System.out.println("結束了");
	}

}

import org.springframework.context.ApplicationEvent;

public class MyEvent2 extends ApplicationEvent {

	private static final long serialVersionUID = -1077732602632408750L;
	
	private String msg;

	public MyEvent2(String msg) {
		super(msg);
		this.msg = msg;
	}

	public void myevent() {
		System.out.println("輪到我了2");
		System.out.println(msg);
		System.out.println("結束了2");
	}

}

監聽器:

import org.springframework.context.ApplicationListener;

public class MyListener implements ApplicationListener<MyEvent> {

	@Override
	public void onApplicationEvent(MyEvent event) {
		// TODO Auto-generated method stub
		event.myevent();
	}
}

import org.springframework.context.ApplicationListener;

public class MyListener2 implements ApplicationListener<MyEvent2> {

	@Override
	public void onApplicationEvent(MyEvent2 event) {
		// TODO Auto-generated method stub
		event.myevent();
	}
}
配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context"  
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">   
  	
  	<bean id="myListener" class="com.learn1.listener.listener.MyListener" />
  	
  	<bean id="myListener2" class="com.learn1.listener.listener.MyListener2" />
  	
</beans>
測試類:

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

public class MyAction {
	
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext2.xml");
		MyEvent event = new MyEvent("event");
		MyEvent2 event2 = new MyEvent2("event2");
		MyEvent event3 = new MyEvent("event3");

		context.publishEvent(event);
		context.publishEvent(event2);
		context.publishEvent(event3);
	}
}
結果:

輪到我了
event
結束了
輪到我了2
event2
結束了2
輪到我了
event3
結束了





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章