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> {

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

猜你喜欢

转载自xieyan30.iteye.com/blog/1841373