博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring容器事件
阅读量:2492 次
发布时间:2019-05-11

本文共 2463 字,大约阅读时间需要 8 分钟。

概念

基本概念

  • 事件源:事件生产者
  • 事件监听器注册表:事件监听器的容器。
  • 事件广播器:负责把事件通知给事件监听器,它是事件和事件监听器的桥梁。

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
{
@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实例:


输出

发送消息: hello, message

转载地址:http://bxhrb.baihongyu.com/

你可能感兴趣的文章
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>