spring的事件
简介
通过查看ApplicationContext继承了ApplicationEvent 而ApplicationEvent继续jdk的事件监听, 的实现分别不同的操作,而通过类图发现通过实现ApplicationEvent ,各个子类承担不同的监听工作。
事件监听类图
事件发布者
说明:
ContextRefreshedEvent |
事件被发布当ApplicationContext被初始化或者刷新时,它可以由refresh()方法引起在ConfigurableApplicationtext接口中。 |
---|---|
ContextStartedEvent |
事件被发布当ApplicationContext通过ConfiugrableApplication()接口的start()方法启动时。你可以查询数据库或者你可以重新启动任何停止的应用在收到这个事件后。 |
ContextStoppedEvent |
事件被发布当ApplicationContext通过ConfigurableApplication接口的stop()方法停止时。你可以做必须的看家工作在收到这个事件时。 |
ContextClosedEvent |
事件被发布当ApplicationContext通过ConfigurableApplicationContext接口的close()方法关闭时。一个关闭的上下文到达它声明的终点,不能在被刷新或者重启。 |
RequestHandledEvent |
这是一个web专有的事件,告诉所有beans有一个HTTP请求已经被处理。 |
接口简介:
ApplicationEvent : 事件,代表一个事情发生了,一个事件对象需要关联(事件源,事件关联的对象);
ApplicationEventPublisher : 发布消息对象,负责发布消息,调度消息的监听器;
ApplicationListener : 负责处理某一类消息;
源码实现
版本号
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
</dependencies>
/**
* @Auther: csh
* @Date: 2020/7/9 17:11
* @Description:自定义事件
*/
public class UserEvent extends ApplicationEvent {
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public UserEvent(Object source) {
super(source);
}
@Override
public String toString() {
return "this my event";
}
}
/**
* @Auther: csh
* @Date: 2020/7/9 17:14
* @Description:负责处理类UserEvent消息
*/
public class UserEventHandler implements ApplicationListener<UserEvent> {
public void onApplicationEvent(UserEvent event) {
System.out.println(event.toString());
}
}
/**
* @Auther: csh
* @Date: 2020/7/9 17:12
* @Description:负责发布消息
*/
public class UserEventPublisher implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;
}
public void publish(){
UserEvent userEvent = new UserEvent(this);
publisher.publishEvent(userEvent);
}
}
/**
* @Auther: csh
* @Date: 2020/7/9 17:15
* @Description:自定义事件
*/
public class UserEventTest {
public static void main(String[] args) {
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("event/applicationfile-event.xml");
UserEventPublisher userEventPublisher = context.getBean("userEventPublisher", UserEventPublisher.class);
userEventPublisher.publish();
userEventPublisher.publish();
}
}
this my event
this my event
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
最后
spring event事件是通过观察模式实现的。参考:设计模式-观察者模式,详细了解的话可以去参考一下相关源码,后续文章再详细写出。
- python3.6抓取100知乎用户头像详解(四)
- 从运营商小广告到HTTPS
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]
- 区块链:为什么它不仅仅是比特币?
- Java Mail(二):JavaMail介绍及发送一封简单邮件
- ASP.NET MVC Controller激活系统详解:总体设计
- .NET Core采用的全新配置系统[7]: 将配置保存在数据库中
- Selenium3+Python3环境部署
- Java Mail(三):Session、Message详解
- .NET Core采用的全新配置系统[8]: 如何实现配置与源文件的同步
- 四个问答让你秒懂区块链原理及应用
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
- 【机器学习实战】第11章 使用 Apriori 算法进行关联分析
- 【Scikit-Learn 中文文档】概率校准 - 监督学习 - 用户指南 | ApacheCN
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- spring框架应用系列一:annotation-config自动装配
- 弄它!!!2020年了你还不懂ACL嘛,小编带你走进ACL的世界,分分钟搞定!!!
- jsp实用过滤器写法
- 搞它!!! Linux 查看CPU信息,机器型号,内存等信息
- shell脚本快速入门之----sort、uniq和tr
- 社区开源框架网络模块:ConnectionManager详解
- 搞它!!!Linux--深入介绍firewalld防火墙管理工具
- 搞它!!! 深入介绍iptables防火墙管理工具
- ZooKeeper的十二连问,你顶得了嘛?
- 手把手教你,嘴对嘴传达----Apache虚拟主机配置与应用
- 手把手教你,嘴对嘴传达----Apache的访问控制
- spring框架应用系列二:component-scan自动扫描注册装配
- 手把手教你,嘴对嘴传达------Apache日志管理日志(rotatelogs分割工具、AWStats日志分析)
- 配合JAVA的AJAX使用
- 手把手教你,嘴对嘴传达------Apache网页优化