Spring容器事件
2015-12-15 13:36
435 查看
概念
基本概念
事件源:事件生产者事件监听器注册表:事件监听器的容器。
事件广播器:负责把事件通知给事件监听器,它是事件和事件监听器的桥梁。
Spring事件类结构
事件类ApplicationEvent继承了Java标准库中的EventObject监听器类ApplicationListener继承了Java标准库中的EventListener。
事件广播器接口ApplicationEventMulticaster
具体示例
这里模拟一个短信发送器MessageSender,监听器MessageListener将发送的消息值打印出来。事件:
package exa.ydoing.event; import org.springframework.context.ApplicationEvent; public class MessageEvent extends ApplicationEvent{ private static final long serialVersionUID = 1L; private String sms; public MessageEvent(Object source, String sms) { super(source); this.sms = sms; } public String getSms() { return sms; } public void setSms(String sms) { this.sms = sms; } }
监听器:
package exa.ydoing.event; import org.springframework.context.ApplicationListener; public class MessageListener implements ApplicationListener<MessageEvent>{ @Override public void onApplicationEvent(MessageEvent event) { System.out.println("发送消息: " + event.getSms()); } }
发送器
需要实现ApplicationContextAware;这样发送器才能获得ApplicationContext的引用,而ApplicationContext接口扩展了ApplicationEventPublisher接口,发送器才能调用的ApplicationEventPublisher接口的publishEvent方法package exa.ydoing.event; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; public class MessageSender implements ApplicationContextAware{ private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public void sendMessage(String sms){ ApplicationEvent event = new MessageEvent(this.applicationContext, sms); //向监听器发送事件 applicationContext.publishEvent(event); } }
测试:
package exa.ydoing.event; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestApp { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml"); MessageSender sender = ctx.getBean("messageSender", MessageSender.class); sender.sendMessage("hello, world"); } }
Bean在ApplicationContext.xml的定义
只要Bean实现了ApplicationContextAware接口,Spring容器会自动注入当前的ApplicationContext实例:<bean class="exa.ydoing.event.MessageListener"/> <bean id="messageSender" class="exa.ydoing.event.MessageSender"/>
输出
发送消息: hello, message
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- jQuery中的常用事件总结
- C#实现WinForm捕获最小化事件的方法
- c#事件使用示例详解
- C#中的事件介绍
- C#实现自定义双击事件
- extjs 为某个事件设置拦截器
- jQuery阻止同类型事件小结
- jQuery bind事件使用详解
- jQuery支持添加事件的日历特效代码分享(3种样式)
- C#中委托和事件的区别实例解析
- SQLSERVER中得到执行计划的两种方式
- C#中事件的动态调用实现方法
- ASP.NET中实现定制自己的委托和事件参数类
- C#处理Paint事件的方法
- javascript下利用for( in )语句 获得所有事件名称的代码
- 关于JavaScript与HTML的交互事件
- JavaScript 学习笔记(十六) js事件