Spring 本身有[b]ApplicationEvent[/b]和[b]ApplicationListener[/b],ApplicationContext可以釋出 ApplicationEvent,然後ApplicationListener監聽event并做出相應動作。但是這裡的 ApplicationEvent有個陷阱,它的傳播範圍和目前的ApplicationContext的級别有關,并不是系統中所有的ApplicationListener都可以收到所有的Event。
假設目前系統為一個典型的Struts+Spring+Hibernate系統,那麼系統中至少會有兩個ApplicationContext 存在,一個時root ApplicationContext,一個是Servlet的ApplicationContext。root ApplicationContext中包含你所有在webApplicationContext.xml中定義的bean,Servlet的 ApplicationContext則包含有所有在action-servlet.xml中定義的bean,需要注意的是root context中的bean是無法看到servlet context中的bean的。而在servlet context中的ApplicationListener也無法收到root context釋出的ApplicationEvent。