spring的事件機制采用了觀察者設計模式。
關鍵點在於ApplicationContext的兩個成員:ApplicationEvent ApplicationListenter。
很顯然ApplicatonEvent是java事件在Spring中的實現,用戶要自定義一個spring事件,只需要繼承自ApplicatonEvent;而ApplicationListener則是一個監聽器,用戶的自定義監聽器同樣需要實現ApplicationListener接口,並重寫onApplicationEvent(ApplicationEvent event)方法。
定義完事件和監聽器后需要在spring中進行配置。很簡單,就是將監聽器配置為一個bean:<bean class="com.lincoln.spring.EmailListener"/>。
第三步,觸發事件:直接調用ApplicationContext的publishEvent(event)方法。
實例如下:
1、定義一個event:
public class EmailEvent extends ApplicationContextEvent{ public EmailEvent(ApplicationContext source){ super(source); } private String address ; private String content ; public void setAddress(String address) { this.address = address; } public void setContent(String content) { this.content = content; } public String getAddress() { return address; } public String getContent() { return content; } }
2、定義一個listener
public class EventListener implements ApplicationListener{ public void onApplicationEvent(ApplicationEvent event) { if( event instanceof EmailEvent ){ EmailEvent ee = (EmailEvent)event ; System.out.println("the email's address is "+ee.getAddress()+ "\n content is "+ee.getContent()); } } }
3、配置文件
<bean id="eventListener" class="com.lincoln.event.EventListener" ></bean>
4、測試類:
public class TestEvent { @Test public void testEvent() { ApplicationContext context = new ClassPathXmlApplicationContext("com/lincoln/event/event.xml"); EmailEvent event = new EmailEvent(context); event.setAddress("licolnsPei@gmail.com"); event.setContent("Hello,spring ; I will fuck you !"); context.publishEvent(event); } }
