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); } }