深入浅出Spring事件机制

事件实现依赖ApplicationEvent抽象类和ApplicationListener接口,applicationContext发布(publishEvent)了事件以后,ApplicationListener的onApplicationEvent监听之:
Java代码如下
package com.uqee.spring.applicationContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationEvent;

public class EmailEvent extends ApplicationEvent
{
	private String address;
	private String text;
	private String email;
	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

	private Log logger = LogFactory.getLog(EmailEvent.class);

	public EmailEvent(Object source)
	{
		super(source);
		// TODO Auto-generated constructor stub
	}
	
	public EmailEvent(String email,String address,String text)
	{
		super(email);
		this.email = email;
		this.address = address;
		this.text = text;
	}
	
	public void printInfo()
	{
//		System.out.println("Send this Email, address:"+address+" text:");
		logger.info("Send this Email, address:"+address+" text:"+text);
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1667085258090884727L;

}

package com.uqee.spring.applicationContext;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

public class EmailNotifier implements ApplicationListener
{

	private String notificationAddress;
	
	
	public String getNotificationAddress()
	{
		return notificationAddress;
	}


	public void setNotificationAddress(String notificationAddress)
	{
		this.notificationAddress = notificationAddress;
	}


	@Override
	public void onApplicationEvent(ApplicationEvent event)
	{
		// TODO Auto-generated method stub
		if(event instanceof EmailEvent)
		{
			//notifier apppriate person
			EmailEvent emailEvent = (EmailEvent)event;
			System.out.println("我已收到通知:"+emailEvent.getEmail()+"要发邮件了。。");
		}
	}

}

package com.uqee.spring.applicationContext;

import java.util.List;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class EmailBean implements ApplicationContextAware
{
	
	private ApplicationContext ctx = null;
	public ApplicationContext getCtx()
	{
		return ctx;
	}

	private List backList;

	public List getBackList()
	{
		return backList;
	}

	public void setBackList(List backList)
	{
		this.backList = backList;
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException
	{
		// TODO Auto-generated method stub
		this.ctx = applicationContext;
	}
	
	public void sendEmail(String email,String title,String text)
	{
		if(backList.contains(email))
		{
			EmailEvent evt = new EmailEvent(email,title, text);
			ctx.publishEvent(evt);
			return ;
		}
	}
}

xml配置如下
<bean id="emailer" class="com.uqee.spring.applicationContext.EmailBean">
	    <property name="backList">
	          <list>
	             <value>ncg2.0@163.com</value>
	             <value>niechanggang@gmail.com</value>
	             <value>373045912@qq.com</value>
	          </list>
	    </property>
	</bean>
	
	<bean id="emailNotifier" class="com.uqee.spring.applicationContext.EmailNotifier">
	     <property name="notificationAddress">
	         <value>qingwa@163.com</value>
	     </property>
	</bean>

测试类如下
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext5.xml");
		EmailBean emailer = (EmailBean)applicationContext.getBean("emailer");
		emailer.sendEmail("373045912@qq.com", "邮件头", "邮件正文");

打印结果如下:
我已收到通知:373045912@qq.com要发邮件了。。

转载于:https://my.oschina.net/u/218421/blog/37948

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值