相信做 Java 开发的朋友,大多都是学习过或至少了解过 Java GUI 编程的,其中有大量的事件和控件的绑定,当我们需要在点击某个按钮实现某些操作的时候,其实就是为这个按钮控件注册了一个合理处理点击事件的监听器。此外,Spring Framework 中也有许多用到事件处理机制的地方,如 ApplicationContextEvent 及其子类,代表着容器的启动、停止、关闭、刷新等事件。本文会为大家介绍 Java 的事件处理机制,也会用示例来说明,如何优雅地触发并处理一个自定义事件。
Java 自 1.1 之后基于委托事件模型,定义了标准一致的获取和处理事件的方式。它的思路非常简单,由事件源发起特定事件,并将事件发送给一个或多个事件监听器,而监听器在此过程中一直处于等待状态,直到接收到该事件,然后处理事件并返回。实现起来也很简单:
- 定义事件
- 实现特定的监听器接口,接收特定类型的事件
- 实现代码,注册(或解除)监听器作为特定事件类型的接收者
- 在恰当的时机触发事件
在 Java 的这个事件处理机制中,包含三个核心组件:
那么问题来了,我们如何优雅地触发并处理一个自定义事件呢?
在 Java 中自定义事件非常简单。考虑到现在各个应用中都有绑定社交账号的需求,我们就以此为例,在社交账号绑定或者解绑时简单的打印一条记录。
首先定义一个事件对象,代码如下:
```java
public class SocialEvent extends EventObject {
private static final long serialVersionUID = -5473622737706032666L;
相关文章
Java 面试题集锦
第一阶段 1、重载(overload)和重写(overwrite)区别 重写:子类继承父类,子类重写父类的方法。 重载: 2、StringBuffer、StringBuilder、String 区别 ...
SpringMVC(3)-RestFul风格
一.概念:Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 二.功能: 1.资源:互联网所有的事物都...
Java 线程创建与常用方法
进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO...
SpringCloud微服务实战——搭建企业级开发框架(二十九):集成分布式对象存储服务及记录管理
微服务应用中图片、文件等存储区别于单体应用,单体应用可以放到本地读写磁盘文件,微服务应用必需用到分布式存储,将图片、文件等存储到服务稳定的分布式存储服务器。目前,很多云服务商提供了存储的云服务,比如阿...
MySQL索引凭什么能让查询效率提高这么多?
我相信大家在数据库优化的时候都会说到索引,我也不例外,大家也基本上能对数据结构的优化回答个一二三,以及页缓存之类的都能扯上几句,但是有一次阿里P9的一个面试问我:你能从计算机层面开始说一下一个索引数据...
IDEA使用Gittee提交代码
今天给大家分享一下如何从idea提交代码到gitee上面。 1.先在gitee上创建仓库 2.填写相应的信息 3.下载git 直接next一站式安装 4.鼠标右键点击 Git Bash Here, 通...
Metro 界面设计案例
Metro是微软的一贯设计风格,相对Google的Material Desgin ,Metro更加的简洁,清晰明了。 Material 的设计也是很不错的,而且在Android,Web上都能经常看到M...
Java 17中对switch的模式匹配增强
通过下面这个例子再回忆一下: Map data = new HashMap<>(); data.put("key1", "aaa"); data.p...
键入网址到网页显示,期间发生了什么?
生成http请求信息: 请求行(请求方法字段、URL字段和HTTP协议版本)GET /index.html HTTP/1.1 消息头(key-value形式)User-Agent:产生请求的浏览器类型...
【笔记】springSecurity-OAuth2.0-授权模式演示
SpringSecurityOauth2架构 介绍 流程: 用户访问,此时没有Token。Oauth2RestTemplate会报错,这个报错信息会被Oauth2ClientContextFilter...
在Spring中测试CGLIB动态代理遇到ClassNotFoundException: org.objectweb.asm.Type问题
在Spring项目中进行简单的cglib动态代理的学习测试,主要代码如下: 一个目标类HaveDinnerService public class HaveDinnerService { public...
nacos 快速入门
外表可是具有欺骗性的。 No victory comes without a price. 凡是成功就要付出代价。 这个快速开始手册是帮忙您快速在您的电脑上,下载、安装并使用 nacos。 Nacos...
【每日算法】二分查找法
模板 例题 367. 有效的完全平方数 描述 示例1 示例2 提示 思路 代码 69.x的平方根 描述 示例1 示例2 提示 代码 模板 ``` left,right=1,n
SpringBoot+vue 练手项目– 个人博客系统
SpringBoot+vue练手项目---博客系统 项目使用技术 : springboot + mybatisplus+redis+mysql 项目讲解:https://www.bilibili.co...
设计模式之解释器模式
解释器模式字面意思,也即解释某些内容的含义。这种设计模式是实际开发中最不容易用到的。比如SQL解析,符号处理引擎,会用到解释器模式,属于更底层的开发人员才会用到的设计模式。 本文通过解释器模式的概念、...