SpringBoot深入分析讲解 * 模式上
作者:lhf2112 发布时间:2022-06-25 21:04:04
标签:SpringBoot, , ,模式
注:图片来源于网络
SpringBoot作为业内公认的优秀开源框架,它的 * 是如何实现呢?在这里首先对一些基础组件进行分析;
1、事件ApplicationEvent
ApplicationEvent是一个抽象类,idea上展开其继承关系如图:
可见SpringBoot所定义的事件类型是极为丰富的。
2、 * ApplicationListener
ApplicationListener是一个接口,我们也可以通过实现这个接口来定义自己的 * ,可以通过与事件初始化器方式相似的方式进行加载。
@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
/**
* Handle an application event.
* @param event the event to respond to
*/
void onApplicationEvent(E event);
}
我们可以看到代码中它接受一个上文中提到的事件泛型,这代表了此 * 关注的事件;
还有一种实现 * 的方式,即实现SmartApplicationListener接口,SmartApplicationListener继承了ApplicationListener接口,通过这种方式实现 * ,可以同时注册多个感兴趣的事件,只需实现接口的supportsEventType方法即可;
public interface SmartApplicationListener extends ApplicationListener<ApplicationEvent>, Ordered {
/**
* Determine whether this listener actually supports the given event type.
* @param eventType the event type (never {@code null})
*/
boolean supportsEventType(Class<? extends ApplicationEvent> eventType);
/**
* Determine whether this listener actually supports the given source type.
* <p>The default implementation always returns {@code true}.
* @param sourceType the source type, or {@code null} if no source
*/
default boolean supportsSourceType(@Nullable Class<?> sourceType) {
return true;
}
/**
* Determine this listener's order in a set of listeners for the same event.
* <p>The default implementation returns {@link #LOWEST_PRECEDENCE}.
*/
@Override
default int getOrder() {
return LOWEST_PRECEDENCE;
}
}
3、事件广播器ApplicationEventMulticaster
ApplicationEventMulticaster是一个接口,定义了添加 * 、删除 * 、传播事件等方法;
SpringBoot为我们实现了SimpleApplicationEventMulticaster这一事件广播器,继承关系如图所示:
SpringBoot如何传播事件,有时间在下一篇博文进行整理,本文有哪些不对之处,也感谢大家的指正。
来源:https://blog.csdn.net/lhf2112/article/details/103796423


猜你喜欢
- /** * 考拉兹猜想:Collatz Conjecture * 又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜
- 1、java 的下载和安装一、安装JDKjava下载网址 或者 点击这里根据自己操作系统和系统位数下载相应的JDK安装
- 一、系统介绍 1.系统功能登录系统查询信息新增信息修改信息删除信息2.环境配置JDK版本:1.8Mysql:8.0.133.数据库
- 1. 问题所示编译ssm的项目的时候出现了这个错误导致一直运行不起来SLF4J: Failed to load class "or
- Activity是Android系统的4个应用程序组件之一。通过传统方法显示的Activity都是充满整个屏幕,也就是全屏的Activity
- 本文实例为大家分享了UGUI实现卡片椭圆方向滚动的具体代码,供大家参考,具体内容如下搭建简单的场景运行效果卡片移动动画通过插件DoTween
- BufferedInputStream BufferedInputStream 是缓冲输入流。它继承于FilterInputSt
- 实例引入在家庭影院中,有灯光,屏幕,投影机,功放机,DVD 播放器这几个基本的工具:灯光,可以关闭灯光和打开灯光。投影机,可以打开和关闭投影
- 在开发的过程中,往往会需要在组件中添加一些按钮,用于执行一些自定义的操作。例如你有一个组件A,里面有一个List<Collider&g
- 用类加载器的5中形式读取.properties文件(这个.properties文件一般放在src的下面)用类加载器进行读取:这里采取先向大家
- 前段时间,我写一个树的访问算法的时候,用了Visitor模式把访问的算法分离了出来,当时打算用lambda表达式写visit算法的,却发现带
- 本文实例为大家分享了Android实现蒙板效果的相关代码,供大家参考,具体内容如下1、不保留标题栏蒙板的实现效果:原理:1、弹窗时,设置背景
- 正常maven依赖jar包的pom.xml写法如下:<!-- https://mvnrepository.com/artifact/o
- 前言前面小空带大家了解了TextView的属性,实践了一些自定义粗细,阴影效果,链接形文字。但这还仅仅局限在用她本身的能力来实现的,那么她还
- Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式什么是Java线程同步
- 一、月份英文简写DateTime dt = DateTime.Now;string MM = dt.AddMonths(-1).ToStri
- 问题描述平常用的是java8,最近在学习java的新特性。这就需要从java8往更高的java版本切换。由于还在使用java8,测试完新特性
- idea无法切换分支报错idea拉取项目后,master分支配置完项目基础配置后,生成.iml等文件不受git管理后无法检出其他分支报错如下
- 如何使用exe4j把jar打包成exe文件最近,做了几个javafx的项目,想要把jar包打成exe的可执行软件,下面时我使用exe4j打包
- 前言Android提供了很多种保存应用程序数据的方法。其中一种就是用SharedPreferences对象来保存我们私有的键值(key-va