Java两大工具库:Commons和Guava(1)

时间:2023-01-26 19:58:57

您好,我是湘王,这是我的51CTO博客。值此新春佳节,我给您拜年啦~祝您在新的一年中所求皆所愿,所行皆坦途,展宏“兔”,有钱“兔”,多喜乐,常安宁!




Java的成功很大程度上得益于开源软件的成功,尤其是构建上开源软件基础上的开源生态,这才是Java能够繁荣、出圈的真正原因。

在开源的世界中,谈起apache,它的大名恐怕很少有工程师会不知道:从最初的apache到tomcat、从perl到maven,从hadoop到spark再到storm,apache从一个小小的web服务器演变成了后端开发(几乎全是Java)的孵化器,现今几乎一大部分业界知名开源软件,都在apache渡过了「童年时代」。

要提高Java开发水平,除了自身要不断学习实践之外,还需要借鉴一些优秀的开源框架和开发工具,包括它们背后的设计思想和实现思路,比如IoC、DI、AoP等、设计模式,既可以借力打力,又能学习到看书和日常工作中都很难学到的东西。

看源码不一定非得看spring、hadoop、spark、dubbo这类非常重量级的开源框架,平常开发中使用的像fastjson、rocketmq、druid/hikari、junit等这类轻量级甚至超轻量级的框架也是非常值得一看的,其实也不用多看,只要能够深刻理解其中某一两个的设计思路、实现手段、编码技巧,基本上就可以做到触类旁通、一通百通了。

在互联网行业,另一个和Apache一样出名甚至更出名的就是Google,一个是全世界最大的开源软件基金会,一个是全世界最大的搜索引擎,出于自身业务的需要,他们都对JDK进行了封装和扩展,分别是Apache Commons和Google Guava。


Apache Commons其实是一组开源中间件的统称,除了一些使用较少甚至被废弃的外,常用的包括:

1、Commons-BeanUtils:JavaBean反射的相关API,提供操作Bean的一些工具;

2、Commons-Codec:包含一些通用的编解码算法,含语音编码器、Hex、Base64以及URL encoder;

3、Commons-Collections:对Java集合的扩展和增强;

4、Commons-HttpClient:提供了可以工作于HTTP客户端的一个框架;

5、Commons-FileUpload:对文件操作提供强大和高性能的封装;

6、Commons-IO:对Java I/O操作的封装;

7、Commons-Lang:封装了一些java.lang中包装类型的扩展功能,Commons-Lang3是它的增强;

8、Commons-Pool:提供了通用对象池接口,一个模块化的对象池实现。


而类似Apache Commons,Google Guava也提供了众多的开发工具(锤子):

1、基本工具类:条件检查、简化Object方法实现、排序和简化异常操作等;

2、集合操作类:这是Guava最成熟和为人所知的部分;

3、缓存类:本地缓存实现,支持多种缓存过期策略,仅支持单点;

4、并发工具类:让编写正确的并发代码更简单;

5、字符串处理类:包括分割、连接、填充等操作;

6、扩展原生类型:扩展JDK的原生类型(如int、char)操作, 包括某些无符号形式;

7、I/O操作类:对Java I/O操作的封装;

8、事件总线:以发布-订阅模式通信,但组件不需要显式地注册到其他组件中;

9、反射工具类:Java反射机制工具类。


先从Apache Commons最常用的一个组件——commons-lang3——开始。

创建一个SpringBoot项目,创建时不添加任何依赖。创建完成后在pom文件中添加依赖:

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-lang3</artifactId>

</dependency>

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-io</artifactId>

</dependency>


很多第三方依赖包中都提供了相似的工具类,比如StringUtils类在Spring、commons-lang3中都有出现。而且除了StringUtils、DateUtils、ArrayUtils等一些常规工具类之外,还有许多非常规工具。如果能掌握好这些工具类,对开发会有很大助益,可以避免很多重复造*的工作。

以常见的字符串工具类为例,应用最多的主要是:

1、org.apache.commons.lang.StringUtils;

2、org.apache.commons.lang.StringEscapeUtils;

3、org.apache.commons.lang3.StringUtils;

4、org.apache.commons.lang3.StringEscapeUtils;

5、org.springframework.util.StringUtils;

其中又以commons-lang3的StringUtils使用最多。这些StringUtils总体上差异不大,主要是一些细小的差别。

Java两大工具库:Commons和Guava(1)


Java两大工具库:Commons和Guava(1)


Java两大工具库:Commons和Guava(1)


Java两大工具库:Commons和Guava(1)


I/O工具类经常使用的是:

1、org.apache.commons.io.IOUtils;

2、org.apache.commons.io.FileUtils;

3、org.apache.commons.io.FilenameUtils。

Java两大工具库:Commons和Guava(1)


Java两大工具库:Commons和Guava(1)

Java两大工具库:Commons和Guava(1)

数组工具类经常使用的是:

1、org.apache.commons.lang.ArrayUtils;

2、org.apache.commons.lang3.ArrayUtils。

Java两大工具库:Commons和Guava(1)


Java两大工具库:Commons和Guava(1)




节日期间,您仍然可以随时咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~再次祝您兔年吉祥,万事胜意!