读书人

spring事件(2)

发布时间: 2013-04-20 19:43:01 作者: rapoo

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发信

?

读书人网 >软件架构设计

热点推荐