我们模拟邮件发送来讲解事件的整个过程。
我们要讲解事件,首先我们需要定义一个事件。
MailSendEvent.java
package spring3.event.mailSend;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ApplicationContextEvent;
public class MailSendEvent extends ApplicationContextEvent {
private String toAddress;
public MailSendEvent(ApplicationContext source, String toAddress) {
super(source);
this.toAddress = toAddress;
}
public String getToAddress() {
return this.toAddress;
}
}
现在,我们有了事件,我们需要一个监听器来监听我们事件。
MailSendListener.java
package spring3.event.mailSend; import org.springframework.context.ApplicationListener; public class MailSendListener implements ApplicationListener<MailSendEvent> { @Override public void onApplicationEvent(MailSendEvent event) { // 只允许给[email protected]发信,哈哈 String toAddress = event.getToAddress(); if ("[email protected]".equalsIgnoreCase(toAddress)) { System.out.print("给[email protected]发信"); } else { System.out.print("不允许给" + toAddress + "发信"); } } }
事件和事件监听器都有了,那么接下来我们应该发布事件,要不事件和监听器就白写了。
MailSender.java
package spring3.event.mailSend; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class MailSender implements ApplicationContextAware { private ApplicationContext context; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.context = context; } public void sendMail(String toAddress) { System.out.println("开始发送邮件..."); MailSendEvent event = new MailSendEvent(this.context, toAddress); this.context.publishEvent(event); } }
接下来我们在xml里面配置监听器和事件发布器,让spring启动时知道他们存在。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean class="spring3.event.mailSend.MailSendListener"/> <bean id="mailSender" class="spring3.event.mailSend.MailSender"/> </beans>
测试
package spring3.event.mailSend; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class EventTest { /** * @param args */ public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("spring3/event/mailSend/spring_event.xml"); MailSender sender = (MailSender)ctx.getBean("mailSender"); sender.sendMail("[email protected]"); sender.sendMail("[email protected]"); } }
测试结果:
开始发送邮件... 给[email protected]发信开始发送邮件... 不允许给[email protected]发信