commons-lang3 事件机制 <EventListenerSupport>
俗话说,站在巨人肩上,可以使我们走的更远
使用已有的java组件,可以提高我们的开发效率,减少出错几率,apache commons中包含有很多这样的组将,commons-lang3就是其中的一个,当前存在commons-lang和commons-lang3两个组件,后者可看做是前者的升级,前者内容已经迁移到后者,所以我们在使用时,直接使用后者即可

commons-lang3中添加了事件处理机制。EventListenerSupport为event包下的一个事件监听模块。当我们在完成一件事件时,需要通知其他模块做一些处理,就可以使用该功能进行处理
比如:商家发货后,需要通知快递小哥取货,并且通知用户商家已接单。使用该功能实现起来也很简单.
maven依赖中加入commons-lang3
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId>
<artifactId>langdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>langdemo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
接口
package com.demo.langdemo.listeners;
public interface IListeners {
// 接收消息
void receive();
}
用户
package com.demo.langdemo.listeners.impl; import com.demo.langdemo.listeners.IListeners; /**
* 用户
*/
public class User implements IListeners { private String name; public User(String name) {
this.name = name;
} public String getName() {
return name;
} public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息:已发货");
} }
快递员
package com.demo.langdemo.listeners.impl; import com.demo.langdemo.listeners.IListeners; /**
* 快递员
*/
public class Courier implements IListeners { private String name; public Courier(String name) {
this.name = name;
} public String getName() {
return name;
} public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息: 有快递需要发送");
} }
测试类
package com.demo.langdemo; import org.apache.commons.lang3.event.EventListenerSupport;
import com.demo.langdemo.listeners.IListeners;
import com.demo.langdemo.listeners.impl.Courier;
import com.demo.langdemo.listeners.impl.User; public class App {
public static void main(String[] args) {
EventListenerSupport<IListeners> listenersEvent = new EventListenerSupport<>(IListeners.class);
// 注册监听
listenersEvent.addListener(new Courier("快递员小马"));
listenersEvent.addListener(new User("用户小刘"));
listenersEvent.fire().receive();
}
}
运行结果如下

若要新加一个监听,比如通知第三方已发货,则新建一个类实现LListener接口
package com.demo.langdemo.listeners.impl;
import com.demo.langdemo.listeners.IListeners;
public class ThirdParty implements IListeners {
private String name;
public ThirdParty(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void receive() {
System.out.println("\"" + this.getName() + "\"收到信息:已发货");
}
}
注册接口(接口注册要在fire方法之前)
listenersEvent.addListener(new ThirdParty("第三方公司"));
运行测试

commons-lang3 事件机制 <EventListenerSupport>的更多相关文章
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- tkinter事件机制
一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...
- [解惑]JavaScript事件机制
群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”. 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会 ...
- Atitit 数据库的事件机制--触发器与定时任务attilax总结
Atitit 数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...
- 深入浅出iOS事件机制
原文地址: http://zhoon.github.io/ios/2015/04/12/ios-event.html 本文章将讲解有关iOS事件的传递机制,如有错误或者不同的见解,欢迎留言指出. iO ...
- Java 事件机制
java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...
- Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ...
- 【java】org.apache.commons.lang3功能示例
org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
随机推荐
- Java遍历Map的4种方式
public static void main(String[] args) { // 循环遍历Map的4中方法 Map<Integer, Integer> map = new HashM ...
- Oracle AWRSQRPT报告生成和性能分析
我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...
- Ubuntu 安装yii2 advanced版 遇到的坑
1.安装 Composer https://www.yiichina.com/doc/guide/2.0/start-installation通过 Composer 安装 curl -sS https ...
- python将字符串类型list转换成list
python读取了一个list是字符串形式的'[11.23,23.34]',想转换成list类型: 方式一: import ast str_list = "[11.23,23.34]&quo ...
- mysql的学习笔记(三)
1.外键约束(保持数据一致,完整.实现一对多或一对一) 父表(参照的表)和子表(有外键列的表)必须使用相同的存储引擎InnoDB,禁止使用临时表. 外键列和参照列必须具有相似的数据类型.其中数字的长度 ...
- OAuth2实现单点登录SSO
1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”.网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让人抓 ...
- Kubernetes的污点和容忍(下篇)
背景 继上一篇<Kubernetes的污点和容忍(上篇)>,这是https://kubernetes.io/docs/concepts/configuration/taint-and-to ...
- Python:fake-useragent 伪装请求头
写爬虫的时候,在进行 request 请求的时候,多数情况下需要添加请求头,否则就不能正常请求. 添加请求头最常用的做法是修改 User-Agent 来伪装浏览器. 以前在写请求头的时候,都是通过 c ...
- jsom快速入门
JSON JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法,具有自我描述性.类似 XML, 但比 XML 更小 ...
- Springboot 系列(十)使用 Spring data jpa 访问数据库
前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...