iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java两大工具库Commons和Guava如何使用
  • 621
分享到

Java两大工具库Commons和Guava如何使用

2023-07-05 02:07:28 621人浏览 八月长安
摘要

本文小编为大家详细介绍“Java两大工具库Commons和Guava如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java两大工具库Commons和Guava如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习

本文小编为大家详细介绍“Java两大工具库Commons和Guava如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java两大工具库Commons和Guava如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

正文

除了操作集合、限流和缓存,Guava还有另一个隐秘的功能:事件总线EventBus机制——是发布-订阅模式的实现,不需要显式地注册回调——比观察者模式更灵活。

EventBus是在单体架构内实现松耦合的一种很好的手段,通过它可以实现与业务逻辑无关的事件监听和消费。Guava提供的事件总线EventBus分为两种:

  • 同步事件EventBus,主要用于单线程环境;

  • 异步事件AsyncEventBus,主要用于多线程环境。

可以稍稍回顾一下观察者模式。

在支付系统的设计模式中,当完成交易后,需要给用户发送通知时就使用到了观察者模式,怎么做的呢?

  • 定义账户观察者接口及其子接口支付观察者和积分观察者;

  • 支付抽象类实现这两个子接口,具体支付类阿里支付、微信支付和余额支付,也都分别实现这两个子接口;

  • 在账户类中加入观察者接口列表,并增加注册、删除和调用观察者接口的方法;

  • 在支付时将各类支付方式注册到账户的观察者列表中;

  • 在交易完成后,就可以调用账户的调用观察者接口的方法,实现回调。

Java两大工具库Commons和Guava如何使用

观察者模式的实现稍嫌麻烦。

既然用观察者模式实现比较麻烦,那不妨换个思路,用Guava EventBus来实现,而且无需继承任何接口。调用、发送回调通知同样也很简单,用EventBus把支付回调再来实现一遍。

先定义观察者

public class AliPayObserver {    // 标记当前订阅者是线程安全的,支持并发接收消息    @AllowConcurrentEvents    @Subscribe    public void pay(Account account) {        if (account.getName().equalsIgnoreCase("ALI")) {            System.out.println("支付宝 >>>>>> 已付款");            System.out.println(account.getMessage());        }    }}
public class WeixinObserver {    // 标记当前订阅者是线程安全的,支持并发接收消息    @AllowConcurrentEvents    @Subscribe    public void pay(Account account) {        if (account.getName().equalsIgnoreCase("WEIXIN")) {            System.out.println("微信 >>>>>> 已付款");            System.out.println(account.getMessage());        }    }}
public class YuePayObserver {    // 标记当前订阅者是线程安全的,支持并发接收消息    @AllowConcurrentEvents    @Subscribe    public void pay(Account account) {        if (account.getName().equalsIgnoreCase("YUE")) {            System.out.println("余额 >>>>>> 已付款");            System.out.println(account.getMessage());        }    }}

然后定义账户类

public class Account {    private String name;    private double amount;    private Date date;    public Account(String name, double amount, Date date) {        this.name = name;        this.amount = amount;        this.date = date;    }    public String getName() {        return name;    }    public String getMessage() {        StringBuilder sb = new StringBuilder();        sb.append("账户:").append(this.name).append(", ");        sb.append("金额:").append(amount).append(", ");        sb.append("日期:").append(date);        return sb.toString();    }}

最后实现事件总线

public class EventBusTest {    // 回调通知    public static void notifyObserver() {        EventBus bus = new EventBus();        AliPayObserver ali = new AliPayObserver();        WeixinObserver weixin = new WeixinObserver();        YuePayObserver yue = new YuePayObserver();        bus.reGISter(ali);        bus.register(weixin);        bus.register(yue);        Account account1 = new Account("ALI", 1.6, new Date());        bus.post(account1);        Account account2 = new Account("WEIXIN", 2.2, new Date());        bus.post(account2);        Account account3 = new Account("YUE", 3, new Date());        bus.post(account3);    }    public static void main(String[] args) throws InterruptedException {        notifyObserver();    }}

运行main方法,可以看到,尽管没有显式声明观察者接口,但通过一个@Subscribe注解,就完成了方法回调。这就是EventBus比观察者模式要灵活强大的地方。

如果还不满足,那就再来一个例子。

创建观察者接口和具体观察者

public interface HouseWork {    public void dry();}
public class Woman implements HouseWork {    @Override    public void dry() {        System.out.println("可以晾衣服了");    }}

创建Subject:

public class WashingMachine {    private Vector<HouseWork> vector = new Vector<>();    public void register(HouseWork work) {        vector.add(work);    }    public void unregister(HouseWork work) {        vector.remove(work);    }    public void notifyObserver() {        for (HouseWork work : vector) {            work.dry();        }    }    public static void main(String[] args) throws InterruptedException {        // 洗衣机        WashingMachine machine = new WashingMachine();        // 女主人        Woman woman = new Woman();        // 洗衣机让女主人成为自己的观察者        machine.register(woman);        System.out.println("将衣服放到洗衣机。。。");        System.out.println("买菜、遛娃中。。。");        Thread.sleep(3000);        // 通知观察者(女主人),衣服洗完了        machine.notifyObserver();    }}

用EventBus把刚才家庭妇女做家务的例子再来做一遍(现在换成家庭妇男):

public class Man {    @Subscribe    public void dry(Sheet sheet) {        System.out.println("可以晾 " + sheet.getName() + " 床单了");    }}
public class EventBusTest {    // 回调通知    public static void notifyObserver() {        EventBus bus = new EventBus();        Man man = new Man();        bus.register(man);        bus.post(new Sheet("富安娜"));    }    public static void main(String[] args) {        notifyObserver();    }}
public class Sheet {    private String name;    public Sheet(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

运行main方法,可以看到和之前一样的效果。事件总线的一个缺点是,回调接口必须有参数,这并不友好。

读到这里,这篇“Java两大工具库Commons和Guava如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java两大工具库Commons和Guava如何使用

本文链接: https://www.lsjlt.com/news/349125.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java两大工具库Commons和Guava如何使用
    本文小编为大家详细介绍“Java两大工具库Commons和Guava如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java两大工具库Commons和Guava如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-05
  • Java两大工具库Commons和Guava使用示例详解
    目录正文先定义观察者然后定义账户类最后实现事件总线创建观察者接口和具体观察者创建Subject:正文 除了操作集合、限流和缓存,Guava还有另一个隐秘的功能:事件总线EventB...
    99+
    2023-02-07
    Java工具库Commons Guava Java工具库
  • Apache通用日志工具commons-logging和Log4j怎么使用
    Apache Commons Logging是一个通用的日志工具,它可以和不同的日志框架(如Log4j、Logback、java.u...
    99+
    2023-10-26
    Apache Log4j
  • Apache和NumPy:如何在Java应用程序中使用这两个工具?
    Apache和NumPy都是非常流行的开源工具,分别用于Java和Python的数学计算和数据处理。这两个工具都非常有用,可以帮助开发人员更轻松地完成各种任务。但是,如果您需要在Java应用程序中使用NumPy,您将需要一些额外的工作。在...
    99+
    2023-11-14
    apache numy load
  • 如何在Java中使用Hutool工具类库
    这篇文章将为大家详细讲解有关如何在Java中使用Hutool工具类库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。HuTool 中的一些常用工具类我们引入这个工具类很简单,直接在 Mavan...
    99+
    2023-06-14
  • Java教程和Django索引:如何掌握这两个强大的工具?
    Java和Django是两个广受欢迎的编程工具,分别用于不同的领域。Java是一个强大的面向对象编程语言,广泛用于企业级应用程序开发。而Django是一个高级Web框架,用于Python语言的Web应用程序开发。本文将介绍如何掌握这两个强大...
    99+
    2023-07-22
    教程 django 索引
  • IDEA中如何使用SQL和数据库工具
    在IDEA中可以使用SQL和数据库工具来连接和操作数据库,以下是操作步骤: 打开IDEA,点击菜单栏的View -> To...
    99+
    2024-04-30
    IDEA SQL
  • 如何使用工具和库来优化C++程序?
    现代 c++++ 开发中,利用工具和库进行优化至关重要。valgrind、perf 和 lldb 等工具可识别瓶颈、测量性能并进行调试。eigen、boost 和 opencv 等库可提...
    99+
    2024-05-08
    工具 优化 c++ linux
  • 怎么使用Java工具类库hutool
    本篇内容介绍了“怎么使用Java工具类库hutool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介Hutool是Hu + tool的自造...
    99+
    2023-06-16
  • Hutool Java工具类库_ExcelUtil的使用
    目录Hutool Java工具类库_ExcelUtil依赖ExcelUtilExcelReaderExcelWriterjava解析Excel使用hutool工具类Hutool Ja...
    99+
    2024-04-02
  • Java如何使用Fiddler抓包工具
    这篇文章将为大家详细讲解有关Java如何使用Fiddler抓包工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一. 下载安装Fiddler这里强烈建议大家在官网上下载安装,在此附上链接https://w...
    99+
    2023-06-29
  • 推荐两款java开发实用工具 hutool 和 lombok
    一.hutool工具 摘抄一段hutool工具的简介: Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,是项目中“util”包友好的替代,它节...
    99+
    2024-04-02
  • 如何使用Java和NumPy框架API构建强大的数据分析工具?
    在当今信息时代,数据分析日益成为企业决策的重要工具。Java是一种广泛使用的编程语言,而NumPy是Python中广泛使用的数值计算库。本文将介绍如何使用Java和NumPy框架API构建强大的数据分析工具。 一、NumPy介绍 NumP...
    99+
    2023-07-26
    numpy 框架 api
  • 如何在java中使用 Arrays工具类
    如何在java中使用 Arrays工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Arrays工具类属于java中常用的工具类public static&nb...
    99+
    2023-05-31
    java arrays ava
  • Java并发工具类Future如何使用
    这篇文章主要讲解了“Java并发工具类Future如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java并发工具类Future如何使用”吧!前言Future是一个接口类,定义了5个方...
    99+
    2023-06-30
  • 如何在Java中使用Collections工具类
    本篇文章为大家展示了如何在Java中使用Collections工具类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-14
  • Hutool Java工具类库_ExcelUtil怎么使用
    这篇文章主要介绍“Hutool Java工具类库_ExcelUtil怎么使用”,在日常操作中,相信很多人在Hutool Java工具类库_ExcelUtil怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-06-21
  • 如何在Java中使用EasyExcel工具类
    今天就跟大家聊聊有关如何在Java中使用EasyExcel工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web M...
    99+
    2023-06-14
  • 如何使用SSMS工具来设计和建立数据库
    这篇文章给大家分享的是有关如何使用SSMS工具来设计和建立数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  数据库管理  可以使用SSMS工具来设计和建立数据库,存储企业数...
    99+
    2024-04-02
  • 如何在Java中使用Semaphore工具类
    这篇文章将为大家详细讲解有关如何在Java中使用Semaphore工具类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、Semaphore的理解Semaphore属于java.util.c...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作