ITEEDU

Spring Gossip: 事件传播

如果您打算发布事件通知实作ApplicationListener的类别之实例,则您可以使用ApplicationContext的publishEvent()方法,例如:
ApplicationContext context =new ClassPathXmlApplicationContext("beans-config.xml");
....
context.publishEvent(new ContextClosedEvent(context));
假设您在Bean定义档中有这么定义:
beans-config.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="listener"
class="org.springframework.context.event.ConsoleListener"/>

....
</beans>
则在文字模式下会显示以下的讯息:
...
org.springframework.context.event.ContextClosedEvent
[source=org.springframework.context.support.ClassPathXmlApplicationContext: 
display name [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=8795033]; 
startup date [Fri Oct 28 22:24:15 GMT+08:00 2005]; 
root of context hierarchy]

如果您打算实作自己的ApplicationEvent,则可以直接继承ApplicationEvent,例如:

package onlyfun.caterpillar;
import org.springframework.context.ApplicationEvent;
public class SomeEvent extends ApplicationEvent {
	public SomeEvent(Object obj) {
		super(obj);
	}
	....
}

在必要的时候就使用ApplicationContext的publishEvent()方法发布这个事件以通知实作ApplicationListener的类别之实例:

context.publishEvent(new SomeEvent("SomeEvent published"));