如果您打算發佈事件通知實作ApplicationListener的類別之實例,則您可以使用ApplicationContext的publishEvent()方法,例如:
ApplicationContext context =
new ClassPathXmlApplicationContext("beans-config.xml");
....
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]
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);
}
....
}
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"));