聊聊 Java 开发中那些 “离不开” 的重要依赖
作为一名常年和 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 的 String、Date 类方法不够丰富,自己封装又容易出错,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(表格集合)
- 不可变集合:
ImmutableList、ImmutableMap等,线程安全且性能好 - 字符串处理:
Splitter、Joiner等工具类 - 缓存工具:
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 等),具体选择要根据项目需求。但掌握这些核心依赖,能让你的开发效率和代码质量提升一个档次,快去试试吧!
更多推荐


所有评论(0)