事件传播

如果您打算发布事件通知实现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"));