常用的第三方库

Apache-Commons系列

apache commons下有很多工具级类库,这些工具库质量都很高,而且在业务中也是相当常用

  • commons-lang3: 基础工具库
  • commons-collections4: 集合处理库
  • commons-io: 数据流IO读写库
  • commons-text: 文本处理库
  • commons-pool2: 对象池

其他三方库

  • com.google.guava: 谷歌的基础工具库
  • lombok: 简化Java代码的库
  • net.sf.dozer: JavaBean相互转换库
  • com.thoughtworks.xstream: XML Json序列化反序列化库
  • jackson: Json序列化反序列化库
  • org.reflections: 反射工具库
  • okhttp3: http客户端工具库
  • retrofit2: 申明式http客户端封装库

Lombok的使用

由于第三方库非常的多其API也很多,这里就不一一讲解了(网上资料也很多),这里重点讲解一下lombok的使用

Lombok简介

Lombok可以通过一系列的注解来对class做一些增强,例如: 为POJO类型生成getter/setter方法、为Service类生成log成员变量等等。使用Lombok的目的就是简化Java代码,提高代码可读性,也能提高编码效率(如:一个@Data注解就能省略POJO的getter/setter代码)。更多详情参考初识Lombok

Lombok常用注解

@Data               // 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter             // 注解在属性上;为属性提供 setting 方法
@Getter             // 注解在属性上;为属性提供 getting 方法
@Slf4j              // 注解在类上;为类提供一个 属性名为log 的日志对象
@Log4j              // 注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor  // 注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor // 注解在类上;为类提供一个全参的构造方法
@Cleanup            // 可以关闭流
@Builder            // 被注解的类加个构造者模式
@Synchronized       // 加个同步锁
@SneakyThrows       // 等同于try/catch 捕获异常
@NonNull            // 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value              // 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@ToString           // 注解在类上;为类提供toString方法(可以添加排除和依赖);

更多使用细节请参考:官方文档

Lombok的优缺点

优点:

  • 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
  • 让代码变得简洁,不用过多的去关注相应的方法
  • 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

缺点:

  • 需要IDEA插件支持
  • 不支持多种参数构造器的重载
  • 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

Lombok工作原理

Lombok支持JSR 269 Pluggable Annotation Processing API,Javac从Java6开始支持“JSR 269 API”规范,只要程序实现了该API,就能在Javac运行的时候得到调用。Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下(附图):

  1. javac对源代码进行分析,生成了一棵抽象语法树(AST)
  2. 运行过程中调用实现了“JSR 269 API”的Lombok程序
  3. 此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
  4. javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

Lombok工作原理

自定义工具类

项目中只使用第三方工具库,是远远不能满足项目需求达到只写业务代码的目的的。所有我们要根据业务的通用性和系统的行业性来针对性的写一些通用的工具类,主要包含以下的工具类(后期还会继续完善)

自定义工具类项目地址clever-common-utils

  • 字符串加密、解密以及各种编码处理
  • 通用的Excel读写
  • 图片验证码生产
  • 邮件发送
  • 数据转换
    • JavaBean与Map<String,Object>互转
    • JavaBean与JavaBean之间的转换
    • Json串与Java对象的相互转换
    • XML与Java对象的相互转换
    • Json与Map的相互转换
    • Json数据与XML数据相互转换
    • 汉字转换成拼音的工具类
  • 反射工具封装
  • retrofit2通用封装
  • 构建对象树结构的工具类 BuildTreeUtils
  • JavaBean验证工具(JSR 303)
  • 二维码条形码工具
  • Http客户端通用封装
  • ID生成工具封装 IDCreateUtils
  • …等等等

项目中谨慎引入hutool工具库,不是因为这个库不优秀,主要因为这个库太重自身依赖相当多,有时我们可能只需要其中的一个工具类或工具方法,引入它会带来一堆使用不上的三方库,导致生成的SpringBoot Jar包瞬间大了10多MB。

文档更新时间: 2019-08-16 09:32   作者:lizw