作为一名常年和 Java 打交道的开发者,日常项目里总会引入各种各样的依赖。这些依赖就像工具箱里的 “瑞士军刀”,帮我们省去了重复造轮子的麻烦,让开发效率翻倍。今天就来盘点几个我在工作中高频使用的重要依赖,聊聊它们的核心作用和使用场景。

一、日志门面 + 实现:SLF4J + Logback

        日志几乎是所有 Java 项目的 “标配”,而 SLF4J(Simple Logging Facade for Java)和 Logback 的组合,堪称日志领域的 “黄金搭档”。

<!-- SLF4J 核心接口 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.36</version>
</dependency>
<!-- Logback 实现(包含核心 + 经典绑定) -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>
<!-- 可选:Logback 核心模块(logback-classic 已包含,无需重复导入) -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.11</version>
</dependency>
  • SLF4J 不是具体的日志实现,而是一个日志门面(接口层)。它定义了一套统一的日志接口,让我们可以在不修改代码的情况下,灵活切换底层的日志实现(比如 Logback、Log4j2 等)。最常用的就是它的 LoggerFactory 和 Logger 接口,一行 Logger logger = LoggerFactory.getLogger(MyClass.class); 就能搞定日志对象的获取。
  • Logback 则是 SLF4J 的 “最佳拍档”,作为具体的日志实现,它性能优秀、配置灵活,还原生支持 SLF4J,无需额外的适配层。通过 XML 或 Groovy 配置文件,我们可以轻松定义日志输出格式、输出目的地(控制台、文件)、日志级别(DEBUG/INFO/WARN/ERROR),甚至实现日志滚动(按大小、按时间切割旧日志)。

        为什么选它们? 相比古老的 Log4j,Logback 启动更快、内存占用更低,而且 SLF4J 的 “门面模式” 完美解决了不同框架日志接口混乱的问题(比如 Spring 用 JCL,MyBatis 用 Log4j 等),统一用 SLF4J 接口即可无缝适配。

二、JSON 处理:Jackson

        在前后端交互、接口调用、数据存储中,JSON 格式无处不在,而 Jackson 就是 Java 中处理 JSON 的 “扛把子” 工具。

Jackson 的核心功能包括:

  • 对象与 JSON 互转:通过 ObjectMapper 类的 writeValueAsString()(对象转 JSON)和 readValue()(JSON 转对象)方法,轻松实现 POJO 与 JSON 的序列化和反序列化。
  • 复杂场景支持:处理泛型(比如 List<User>)、日期格式化(通过 @JsonFormat 注解指定格式)、忽略 null 值或特定字段(@JsonIgnore)、自定义序列化逻辑等。
  • 高性能:相比 Gson 等其他 JSON 库,Jackson 在处理大量数据时性能更优,而且是 Spring Boot 的默认 JSON 解析器,与 Spring 生态无缝集成。
  • <!-- Jackson 核心:包含数据绑定、核心、注解模块 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.3</version>
    </dependency>
    <!-- 可选:单独导入核心模块(databind 已包含) -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.13.3</version>
    </dependency>
    <!-- 可选:单独导入注解模块(databind 已包含) -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.13.3</version>
    </dependency>

简化方案:在 Spring Boot 项目中,直接导入 spring-boot-starter-json 即可自动引入 Jackson 全套依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
    <!-- 版本由 Spring Boot 父工程管理,无需手动指定 -->
</dependency>

        使用小技巧:在 Spring Boot 中,只需引入 spring-boot-starter-json 依赖(内置 Jackson),就能在 Controller 中直接返回对象(自动转为 JSON),接收 JSON 参数时也能自动绑定到对象,非常方便。

三、工具类库:Apache Commons Lang3

        开发中经常需要处理字符串、日期、集合等基础操作,Apache Commons Lang3 就像一个 “增强版的 Java 基础工具库”,帮我们简化这些繁琐工作。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

它的常用工具类包括:

  • StringUtils:处理字符串的 “神器”,比如 isEmpty()(判断空字符串)、trim()(去除首尾空格)、join()(拼接数组为字符串)、substringBetween()(提取两个标记间的子串)等,避免了手动判空的冗余代码。
  • DateUtils/DateFormatUtils:日期处理工具,支持日期加减(addDays())、日期格式化(format())、字符串转日期(parseDate())等,比原生 SimpleDateFormat 更易用且线程安全。
  • ObjectUtils:对象操作工具,比如 defaultIfNull()(为空时返回默认值)、equals()(安全比较两个对象是否相等)。
  • Validate:参数校验工具,比如 notNull()(校验对象非空,否则抛异常),简化方法入参校验逻辑。

        为什么离不开它? 原生 Java 的 StringDate 类方法不够丰富,自己封装又容易出错,Commons Lang3 经过多年迭代,稳定性和易用性都经过了实践检验,能显著减少重复代码。

四、数据库访问:MyBatis + MyBatis-Plus

        对于需要操作数据库的 Java 项目,MyBatis 是一款轻量级且灵活的持久层框架,而 MyBatis-Plus 则是在 MyBatis 基础上的 “增强工具”,让 CRUD 操作更简单。

纯 MyBatis 配置:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>
<!-- MyBatis 与 Spring 集成(若使用 Spring) -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>
MyBatis-Plus 配置(推荐,已包含 MyBatis 依赖):
<!-- Spring Boot 项目推荐使用 starter -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>
<!-- 非 Spring Boot 项目使用核心包 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.5.3.1</version>
</dependency>
  • MyBatis 的核心是 “SQL 映射”,通过 XML 或注解定义 SQL 语句,将 Java 方法与 SQL 绑定,实现参数映射和结果集映射。相比 JPA 的 “全自动 ORM”,MyBatis 让开发者更能掌控 SQL,适合复杂查询场景。
  • MyBatis-Plus 则在 MyBatis 基础上增加了 “CRUD 接口自动生成” 功能,通过继承 BaseMapper<T> 接口,无需编写 SQL 就能实现单表的增删改查(比如 insert()selectById()updateById() 等),还支持条件构造器(QueryWrapper)、分页插件、逻辑删除等实用功能,大大减少了重复的 XML 和 Mapper 代码。

        适用场景:如果项目需要灵活控制 SQL,选 MyBatis;如果单表操作多、想快速开发,MyBatis-Plus 能节省大量时间,两者结合堪称 “数据库访问利器”。

五、单元测试:JUnit 5 + Mockito

代码质量离不开测试,JUnit 5 和 Mockito 是 Java 单元测试的 “黄金组合”。

<!-- JUnit 5 核心 API -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
<!-- JUnit 5 运行引擎(必须导入,否则测试无法运行) -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
<!-- Mockito 核心 -->
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
</dependency>
<!-- Mockito 与 JUnit 5 集成 -->
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.8.1</version>
    <scope>test</scope>
</dependency>

简化方案:Spring Boot 项目直接导入 starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <!-- 已包含 JUnit 5、Mockito 等常用测试依赖 -->
</dependency>
  • JUnit 5 是 Java 单元测试的标准框架,相比 JUnit 4,它支持 Lambda 表达式、更灵活的注解(比如 @Test@BeforeEach@AfterEach@ParameterizedTest 等),还能通过 Assertions 类进行断言判断(如 assertEquals()assertTrue()),验证代码逻辑是否正确。
  • Mockito 则是一款 Mock 框架,能帮我们创建 “虚拟对象”(Mock 对象),模拟依赖组件的行为。比如在测试 Service 层时,我们可以 Mock 掉 Dao 层的接口,指定它的返回值,专注于测试 Service 本身的逻辑,而不用依赖真实数据库。

        测试的意义:好的单元测试能提前发现 Bug,尤其在重构代码时,通过运行测试用例可以快速验证功能是否正常,让代码更健壮。Spring Boot 中引入 spring-boot-starter-test 依赖,就能直接使用 JUnit 5 和 Mockito 进行测试。

六、HTTP 客户端:OkHttp

在需要调用外部 API 或进行 HTTP 通信时,OkHttp是一个非常优秀的选择。它是 Square 公司开发的高效 HTTP 客户端,相比 Java 原生的 HttpURLConnection,使用更简单,性能更出色。

核心特性:

  • 支持 HTTP/2,允许同一主机的所有请求共享一个连接
  • 连接池减少请求延迟
  • 透明的 GZIP 压缩减少响应数据大小
  • 缓存响应数据,避免重复请求

Maven 导入配置

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.10.0</version>
</dependency>

使用场景:第三方 API 调用、推送服务、数据同步等需要 HTTP 通信的场景,Spring Cloud 中很多组件也依赖于 OkHttp。

七、集合工具:Google Guava

Guava是 Google 开发的 Java 核心库增强工具,尤其在集合操作方面提供了强大的支持,弥补了 Java 原生集合类的不足。

常用功能:

  • 增强集合类型:Multimap(一键多值映射)、BiMap(双向映射)、Table(表格集合)
  • 不可变集合:ImmutableListImmutableMap等,线程安全且性能好
  • 字符串处理:SplitterJoiner等工具类
  • 缓存工具:CacheBuilder构建本地缓存

Maven 导入配置

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

Guava 的设计非常优雅,很多方法能大幅简化代码,比如用Maps.newHashMap()替代繁琐的new HashMap<>(),用Lists.newArrayList()创建列表等。

八、Excel 处理:EasyExcel

在需要导入导出 Excel 文件的业务场景中,EasyExcel是阿里开源的一款高效工具,相比 POI,它能有效解决大文件处理时的内存溢出问题。

核心优势:

  • 低内存占用,支持百万级数据读写
  • 简单易用的 API,注解式配置
  • 支持 Excel 格式自定义、图片处理、复杂表头

Maven 导入配置

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.0</version>
</dependency>

使用场景:报表导出、数据批量导入、Excel 模板生成等,尤其是需要处理大量数据的情况,EasyExcel 的性能优势明显。

九、加密工具:Apache Commons Codec

Commons Codec提供了常用的编码解码功能,比如 MD5、SHA、Base64 等,避免了自己实现加密算法的风险。

主要功能:

  • 加密算法:MD5、SHA-1、SHA-256 等
  • 编码方式:Base64、URL 编码、十六进制编码
  • 哈希算法:HMAC 系列算法

Maven 导入配置

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

在用户密码加密、数据签名、接口验签等场景中非常实用,使用简单且安全性有保障。

十、PDF 处理:iTextPDF

当需要在系统中生成 PDF 文档(如合同、报表、发票)时,iTextPDF是一个功能全面的选择。

主要功能:

  • 创建 PDF 文档并设置格式
  • 添加文本、图片、表格、水印
  • PDF 加密、解密、合并、拆分

Maven 导入配置

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

注意:iTextPDF 5.x 版本是开源免费的,6.x 以上版本需要商业授权,个人和非商业项目可以使用 5.x 版本。

总结

        以上这些依赖几乎是我每个 Java 项目的 “必选项”:用 SLF4J + Logback 记录日志,Jackson 处理 JSON,Commons Lang3 简化工具类操作,MyBatis 系列操作数据库,JUnit 5 + Mockito 保障代码质量。它们就像成熟的 “积木”,让我们不用重复造轮子,专注于业务逻辑的实现。

        当然,Java 生态中还有很多优秀的依赖(比如处理集合的 Guava、HTTP 客户端 OkHttp 等),具体选择要根据项目需求。但掌握这些核心依赖,能让你的开发效率和代码质量提升一个档次,快去试试吧!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐