spring事件(二)
我们模拟邮件发送来讲解事件的整个过程。
我们要讲解事件,首先我们需要定义一个事件。
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> {@Overridepublic void onApplicationEvent(MailSendEvent event) {// 只允许给xy@126.com发信,哈哈String toAddress = event.getToAddress();if ("xy@126.com".equalsIgnoreCase(toAddress)) {System.out.print("给xy@126.com发信");} 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;@Overridepublic 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 name="code">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("xy@126.com");sender.sendMail("xy111@126.com");}}
?测试结果:
?
开始发送邮件...给xy@126.com发信开始发送邮件...不允许给xy111@126.com发信
?