事件傳播


如果您打算發佈事件通知實作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"));