您现在的位置是:物联网 >>正文
居然可以这样监听,你学会了吗?
物联网19人已围观
简介前面讲到要使自定义注解生效需要写一段驱动代码,那驱动代码什么开始执行比较合适呢?大家可能知道答案:应用启动的时候。回到具体的代码实现中,假设应用程序客户端或服务端)依赖了 RPC框架并且使用了Spr ...
前面讲到要使自定义注解生效需要写一段驱动代码 ,居然监听那驱动代码什么开始执行比较合适呢?可样大家可能知道答案:应用启动的时候 。
回到具体的居然监听代码实现中,假设应用程序(客户端或服务端)依赖了 RPC框架并且使用了Spring环境 ,可样对Spring比较熟悉的居然监听小伙伴应该知道 ,Spring在启动的可样过程中会初始化bean,那是居然监听不是可以在初始化bean之后去执行这段驱动代码呢 ?答案是肯定的。
查阅相关资料后,可样Spring 监听器可以实现上面这个诉求。模板下载居然监听
Spring 监听器
监听器在使用过程中可以监听某些感兴趣的可样事件 ,监听到事件来临时可以做出响应处理。居然监听
Spring事件监听体系包括三大核心组件:事件监听器 、可样事件、居然监听事件广播器,可样如下图:

Spring 监听器
事件广播器事件广播器或者叫事件多播器负责广播发生的居然监听事件并通知所有监听器 ,所有的事件监听器都会提前注册在事件广播器中。
事件所有的动作都可能被定义为一个事件,事件发生后事件广播器通知所有的监听器 ,监听器根据情况做出响应 。
Spring 定义了一个事件基类 :ApplicationEvent ,亿华云看一下源码:
复制public abstract class ApplicationEvent extends EventObject { /** 事件发生的时间 */ private final long timestamp; /** * 创建一个实例 * @param source 事件来源 */ public ApplicationEvent(Object source){ super(source); this.timestamp = System.currentTimeMillis(); }……省略其他代码
}1.2.3.4.5.6.7.8.9.10.11.12.13.14.ApplicationEvent 继承 JDK 定义的事件基类 :EventObject ,
复制public class EventObject implements java.io.Serializable { /** * The object on which the Event initially occurred. */ protected transient Object source;……省略其他代码
}1.2.3.4.5.6.7.ApplicationEvent 是一个抽象类 ,如果需要自定义事件需要继承这个类 :
复制public class MyEvent extends ApplicationEvent {……省略其他代码
}1.2.3.当然 Spring 自身已经定义了非常多的事件:
ContextRefreshedEvent:ApplicationContext 被初始化或刷新时,该事件被发布 。初始化是指所有的Bean被成功装载,后处理Bean被检测并激活 ,所有Singleton Bean 被预实例化 ,ApplicationContext容器已就绪可用 。ContextStartedEvent :ApplicationContext 启动后,该事件被发布 。香港云服务器ContextStoppedEvent :ApplicationContext 停止后,该事件被发布 。ContextClosedEvent:ApplicationContext 关闭后,该事件被发布。以上仅仅列举了几个常用的 Spring 事件。
根据前面分析的业务诉求,我们期望所有的bean初始化完之后开始执行自定义注解的驱动代码 ,所以ContextRefreshedEvent这个事件才是我们感兴趣的,看一下源码:
复制public class ContextRefreshedEvent extends ApplicationContextEvent { public ContextRefreshedEvent(ApplicationContext source){ super(source); }}1.2.3.4.5.看起来非常简单,继承了ApplicationContextEvent,源码下载继续跟一下源码可以发现ApplicationContextEvent继承了我们上面讲的ApplicationEvent。
事件监听器所有的事件监听器都注册在事件广播器中,这好比观察者模式中的观察者。
在 Spring 中ApplicationListener是事件监听器的顶层接口,继承自 JDK 的EventListener,所有的监听器都必须实现这个接口 。
复制public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * 处理事件 * @param event 待响应的事件 */ void onApplicationEvent(E event); //……省略其他代码
}1.2.3.4.5.6.7.8.9.定义了一个onApplicationEvent方法,当有感兴趣的建站模板事件发生后就会执行这个方法进行处理 。
实现自定义监听器
上面介绍了 Spring 监听体系的一些基础知识 ,并通过一些源码进行辅助介绍,这些代码都不是 RPC 框架要写的,RPC 框架当前要做的是实现一个自定义监听器监听感兴趣的事件。
通过结合业务诉求分析出:自定义一个监听器用来监听 Spring 内置ContextRefreshedEvent事件 。
复制public class DefaultRpcListener implements ApplicationListener<ContextRefreshedEvent> { public DefaultRpcListener(){ }@Override
public void onApplicationEvent(ContextRefreshedEvent event){ //TODO 实现业务逻辑
// 1服务端逻辑处理
// 2客户端逻辑处理
}}1.2.3.4.5.6.7.8.9.10.11.自定义的监听器实现了ApplicationListener接口 ,并重写onApplicationEvent方法,方法中待实现的高防服务器业务逻辑是重中之重 。
待实现的业务逻辑中需要对@ServiceExpose和@ServiceReference这两个注解进行处理,@ServiceExpose对应服务端 ,@ServiceReference对应客户端 ,所以基本就是两大块:服务端逻辑处理和客户端逻辑处理 。
注意一下,文中提到的服务端或客户端是站在功能角度上看的 ,不能片面理解,一个应用程序(服务或微服务)既可能是服务端也可能是客户端:

Spring 监听器-第 2 页
如上图 ,微服务 A 调用微服务 B,微服务 B 又调用微服务 C ,微服务 B 在整个调用链中既是客户端又是服务端。
代码结构
自定义监听器DefaultRpcListener放在 listener 包下 ,目前 RPC 框架代码工程结构如下:
复制├── easy-rpc-spring-boot-starter
├── pom.xml├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── leixiaoshuai
│ │ └── easyrpc
│ │ ├── annotation
│ │ │ ├── ServiceExpose.java │ │ │ └── ServiceReference.java│ │ └── listener
│ │ └── DefaultRpcListener.java│ └── resources
└── target1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.小结
本小节首先学习了Spring 监听的基本机制,了解到监听体系有三大关键要素:事件监听器、事件、事件广播器,事件监听器会提前注册到事件广播器中 ,当感兴趣的事件发生后事件广播器会通知到事件监听器,这样事件监听器就可以根据业务场景进行响应。
Spring 提供了事件的基类,大家可以自定义事件,当然也可以直接使用 Spring 内置的事件 ,结合 RPC 框架的业务特点我们发现ContextRefreshedEvent事件比较符合我们的诉求 。
Spring 定义了事件监听器ApplicationListener顶层接口 ,我们只需要实现该接口就可以自定义一个监听器,在监听器中重写onApplicationEvent方法实现相应的业务逻辑。
自定义监听器主要的业务逻辑包括两大块:服务端和客户端,服务端逻辑主要处理@ServiceExpose注解,客户端逻辑主要处理@ServiceReferece注解 。关于注解处理的逻辑我们下一小节详细讲解 。
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“算法与编程”。http://www.bzli.cn/html/933b699060.html
相关文章
你的远程员工真是他自己吗?FBI披露求职者滥用Deepfake
物联网在 Deepfake 的世界,真真假假,有时的确难以区分。AI 算法「Deepfake」可以生成各种有关人物的逼真图像和视频,在换脸领域已经有了广泛的应用。不过,AI 换脸技术引发的争议不断,比如利用 ...
【物联网】
阅读更多2025年多重身份验证(MFA)统计数据和趋势
物联网多重身份验证MFA)旨在以多种方式验证您的身份,使未经授权的用户更难访问敏感信息。它是身份和访问管理库中的关键工具,确保简单的用户名和密码不是保护您的数字账户的唯一大门。当登录时,MFA可能会要求提供 ...
【物联网】
阅读更多深度U盘制作W10教程(使用深度U盘制作,轻松为电脑安装最新的Windows10系统)
物联网随着Windows7的逐渐过时,越来越多的用户开始转向Windows10。然而,许多用户可能不太熟悉如何安装这个操作系统。本文将介绍如何使用深度U盘制作W10安装盘,以方便您快速、简单地安装最新的Wi ...
【物联网】
阅读更多
热门文章
最新文章
友情链接
- Draw.io在长方形里面画横线的教程
- 一加五手机6G怎么样?(性能强悍,一加五手机6G带来全新体验)
- 关机错误导致电脑蓝屏,如何解决?(关机错误导致电脑蓝屏的原因及解决方法详解)
- 探究魅族MX5的性能与用户体验(MX5)
- 用折纸手工解压小电脑(发挥创意,轻松解压身心,享受DIY乐趣)
- 讯飞读写客新建日程的方法
- 微信电脑备录链接错误的解决方法(微信电脑备录链接错误的常见原因及解决步骤)
- 轻松清理联想电脑硬盘灰尘,提升性能(一键清除灰尘,为您的联想电脑注入新生命)
- 重装电脑脚本错误的解决方法(快速修复电脑重装脚本错误的技巧)
- 苹果4(回顾苹果4在当时的性能表现) 源码库网站建设企业服务器b2b信息平台云服务器亿华云香港物理机