您好,我是湘王,这是我的CSDN博客。值此新春佳节,我给您拜年啦~祝您在新的一年中所求皆所愿,所行皆坦途,展宏“兔”,有钱“兔”,多喜乐,常安宁!
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总体上差异不大,主要是一些细小的差别。
![](https://i-blog.csdnimg.cn/blog_migrate/d789afa7024e00d6c1d8c87f25d777d3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9f79f178cce4b2f9bc31917ee1b7f63a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9e51ab67e3a0ad14f080d59c1adfb3a8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/94f193978236b9d4125ec88d5ff4edbe.png)
I/O工具类经常使用的是:
1、org.apache.commons.io.IOUtils;
2、org.apache.commons.io.FileUtils;
3、org.apache.commons.io.FilenameUtils。
![](https://i-blog.csdnimg.cn/blog_migrate/7b788e13df3e13b196e2c4f7f6d8a20f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ed6df65416709933a2a6e89399738f54.png)
![](https://i-blog.csdnimg.cn/blog_migrate/55cad33ea9d30cebf28fd446f27ad630.png)
数组工具类经常使用的是:
1、org.apache.commons.lang.ArrayUtils;
2、org.apache.commons.lang3.ArrayUtils。
![](https://i-blog.csdnimg.cn/blog_migrate/5e67961bf90761f43990e4311d2ff3a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0fdc79776d69dd9ca11ce31394cc80d1.png)
节日期间,您仍然可以随时咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~再次祝您兔年吉祥,万事胜意!