Java常用类库

文章目录

    • 概述
    • Java 常用类库
    • Hutool

概述

Java有着丰富的类库生态系统,涵盖了几乎所有的编程需求。以下是一些常用的Java类库,它们按功能分类,包括核心库、Web开发、数据库操作、JSON处理、XML处理、日志、测试等。
核心类库

  1. Apache Commons: Apache Commons 是一个开源的 Java 类库,提供了许多常用的工具类,包括字符串处理、集合操作、IO 操作、日期时间处理等
    Commons Lang:提供对java.lang类的扩展。
    Commons IO:处理I/O功能的实用工具。
    Commons Collections:扩展和增强了Java集合框架。
  2. Guava:由Google维护的一组核心库,包括集合、缓存、并发、I/O、哈希等功能。
    Web开发
  3. Spring Framework:用于构建企业级应用程序的全面框架,提供依赖注入、AOP、事务管理、MVC等功能。
  4. Spring Boot:用于快速构建独立、生产级Spring应用程序的框架。
  5. Hibernate:流行的ORM(对象关系映射)框架,用于持久化Java对象。
  6. Apache Struts:一个用于创建企业级Java Web应用程序的MVC框架。
    数据库操作
  7. JDBC:Java数据库连接,用于与关系数据库进行交互的标准API。
  8. MyBatis:一个SQL Mapper框架,提供基于XML或注解的SQL语句来操作数据库。
  9. Hibernate:也属于数据库操作类库,用于ORM。
    JSON处理
  10. Jackson:用于解析和生成JSON数据的高性能库。
  11. Gson:Google提供的用于转换Java对象与JSON之间的库。
  12. JSON.org:最基本的JSON库,提供了简单的解析和生成JSON的功能。
    XML处理
  13. JAXP(Java API for XML Processing):标准的XML处理API,包括DOM、SAX和XSLT处理。
  14. JAXB(Java Architecture for XML Binding):用于将Java对象转换为XML和从XML转换为Java对象。
  15. DOM4J:用于处理XML的灵活库,支持XPath、XSLT等。
    日志
  16. Log4j:Apache提供的日志框架,广泛用于Java应用程序。
  17. SLF4J:一个简单的日志门面接口,用于绑定不同的日志实现。
  18. Logback:现代化的日志框架,由Log4j的创始人创建,通常与SLF4J一起使用。
    测试
  19. JUnit:最流行的Java单元测试框架。
  20. TestNG:另一个功能强大的测试框架,支持并发、数据驱动测试等。
  21. Mockito:用于创建和管理模拟对象的框架,通常用于单元测试。
    并发和多线程
  22. java.util.concurrent:Java标准库中的并发包,提供线程池、并发集合、锁等。
  23. Akka:用于构建并发、分布式应用程序的工具包和运行时。
    网络和协议
  24. Apache HttpClient:用于发送HTTP请求的库。
  25. Netty:一个异步事件驱动的网络应用程序框架,用于快速开发高性能协议服务器和客户端。
  26. OkHttp:OkHttp 是 Square 提供的一个 HTTP 客户端库,用于发送 HTTP 请求和处理 HTTP 响应,提供了简洁易用的 API,支持同步和异步请求
    其他
  27. Lombok:用于减少样板代码的工具,通过注解生成常见的代码,如getter、setter、构造函数等。
  28. Apache POI:用于处理微软文档格式(如Excel、Word)的库。
  29. Quartz:功能丰富的调度库,适用于创建复杂的调度任务。
  30. Joda-Time:改进的日期和时间库,虽然Java 8引入了java.time包,但Joda-Time仍在许多遗留系统中使用。
  31. java.time (Java 8+):java.time 是 Java 8 引入的日期时间 API,提供了一套全新的日期时间处理接口,包括 LocalDate、LocalTime、LocalDateTime 等类,以及各种日期时间操作方法
    这些类库在Java开发中非常常见,可以大大提高开发效率和代码质量。根据具体的项目需求,选择合适的类库可以有效地解决许多编程问题。

Java 常用类库

Netty
第一送给Netty。其实我是有私心的,也只有在使用Netty开发一些网络应用的时候,我才能理直气壮的不引入Spring这个目前变得越来越重的家伙,还我一个清清爽爽的世界。
Netty已经成为了目前最流行的Java网络编程框架。有了它,Java才有了与golang等语言相提并论的权利。
SpringBoot
在很多中小公司,Java企业级开发首选SpringBoot,这是没得说的。由于它的应用实在是太广泛,我这里就不浪费笔墨做过多介绍了。
Spring当年的目标,是为了干掉J2EE。屠龙的少年如今变成了龙,现在在干着J2EE当年做的事情。
不过,尽量的做的轻量级,一直是它的主旋律,这一点从来没有变过。因为错的不是Spring,错的是这个世界。
工具类库
由于历史原因,apache-commons工具类库,几乎遍布了项目中的每个角落,比如lang3、beanutils、collections、codec等。个人觉得,apache-commons的很多工具,已经是过度设计了,在一些新项目里,我已经很少使用了。
取而代之的,是大量使用guava工具类库,以及国产的hutool工具类库。有了这些工具,就不用再在项目里写一些拼拼凑凑,让人难受的小工具类了。
说点有意思的事情,guava这个词朗朗上口,它的中文意思是一种热带水果:番石榴,长的就像是小西瓜一样。
单元测试
JUnit几乎成了Java单元测试的标配。JUnit5更是对整体模块进行了重构。现在,它包含3个主要的模块:JUnit Jupiter、JUnit Platform、JUnit Vintage等。
Vintage是为了兼容比较老的版本而存在的,Platform是为了兼容其他测试引擎,这样在JUnit上使用Mockito也成为了可能。如果你的项目比较新,建议直接上Jupiter。
很多国外系统对单元测试看的比较重,这和国内的开发模式是不太一样的。虽然说,单元测试是一个程序员的基本功,但离着普及还有一段距离。不过现在也有很多公司强制要求写单元测试,以任务指标的形式存在。
JMH
JMH是最装逼,最牛逼的基准测试工具套件,主要用在性能测试方面。如果定位到了热点代码,要测试它的性能数据,评估改善情况,就可以交给 JMH。它的测量精度非常高,可达纳秒级别。
它能够消除JIT的差异,测试出真正的代码性能。JMH 已经在 JDK 12中被包含,其他版本的需要自行引入 maven。
OkHTTP
最新的JDK已经内置了HTTP的功能,但这种协议层面的东西,放在基础类库里老感觉不是那么妥当。
很长一段时间里,Apache 的HttpClient统治了世界,甚至重构后在不同版本之间不能够做到兼容。我更喜欢轻量级的OkHTTP多一些,第一次见它还是在Android的应用代码里,现在用在应用代码里也很香。OKHTTP的透明压缩,显得也更加智能一些。像SpringCloud这样的组件,在底层是可以选择切换成HttpClient还是OkHTTP的。
应用层的协议变动都比较大,更新也比较快。比如HTTP2,Quic等支持,显然要对整个类库做很多的修改才能适配。
数据库连接池
SpringBoot2默认选择了hikaricp作为连接池,据说是速度最快的连接池,而且代码量非常的精简。c3p0、dbcp等老旧的数据库连接池已经慢慢退位。
hikaricp非常的卷,它采用无锁化的思想,核心类库只有ConcurrentBag一个,甚至使用Javassist修改字节码来增加执行速度。
在国内,还有一个使用较为广泛的连接池是Druid,它有着完整的监控功能。通过开启后台可以直接在web端查看整个连接池的状态。
affeine
堆内缓存,首选caffeine。很长一段时间,我都在用Guava的LoadingCache。自从测试caffeine之后,我就决定是它了。它结合了LRU和LFU,两者合体之后,变成了新的W-TinyLFU算法,命中率非常高,内存占用也更加的小。在SpringBoot里,通过提供一个CacheManager的Bean,即可与Springboot-cache进行集成,可以说是很方便了。
hazelcast
说完了堆内的,就再说个堆外的。
除了有redis这种选择之外,我们还可以选择hazelcast。hazelcast采用raft算法进行分布式协调,在一致性方面强于redis。据hazelcast测试,在达到一定规模的时候,速度竟然比redis还快,hazelcast和redis甚至有过激烈的口水战。
hazelcast可以以jar包的方式集成在Java应用中,自身同时作为客户端和服务端,组件多节点的集群。它提供了类似redisson一样的功能齐全的分布式数据结构,比如Queue,你只需要直接在Java代码中调用相应的API,它就能把数据同步到所有的节点上去。
日志组件
日志组件是常用的类库,最早得到广泛使用的是log4j,而现阶段比较流行的是slf4j+logback。由于这些类库非常的好用,JDK自带的JUL反而无人问津。
slf4j是门面模式的典型应用,它本身是一套接口,背后可以使用logback和log4j。这些关系,我们能够从上面的图很容易的看出来。
JSON、XML、YAML解析
由于Fastjson频频爆出漏洞,现在在Java中使用最广泛的JSON解析类库,就是jackson库。它最主要的入口工具类是ObjectMapper,解析方法是线程安全的,我们可以在整个项目中共享一个解析对象。
jackson库不仅仅可以解析JSON,它还可以解析XML、YAML、TOML等。事实上,它的抽象接口,可以实现Avro、Protobuf、CSV等格式数据的加载,但我们最长使用的,就是它的JSON解析。

Jolokia
我相信J2EE当年的目的肯定是好的,但总是做一些又大又笨重的东西。JMS算一个,JMX也算一个。
JMX其实是非常不好用的,因为它把功能隔离在了Java体系之内。现在的Promethus监控系统就做的比较好,一切都是HTTP交互的文本格式。
Jolokia就可以提供JMX的远程访问方法,把JMX接口给强制转化成HTTP接口,以便于其他的监控系统进行功能对接。从这个描述上来看,Jolokia就是一个适配器。不过,通过Agent或者Jar包的方式,它能让ActiveMQ,JBoss等这些老掉牙的系统接入到现代化的监控系统中来,也算是大功一件。

hibernate-validator
hibernate留下了一个很棒的遗产,那就是它的验证框架,它是Bean Validation 的参考实现,被广泛的应用于数据库模型校验、参数校验等领域。
在JPA中,@Table的字段可以根据这些验证,自动生成数据库约束。在Spring的Controller中,也可以使用@Valid注解,来自动对传入的对象进行参数验证。

freemarker
FreeMarker 是一款模板引擎,在很早之前,我主要用它来生成Web页面。
不过,随着前后端分离的流行,我现在主要在一些代码生成器工具中用到它。它的应用比较广泛,比如做一个邮件模板,短信模板之类的。如果你写过JSP的话,一定会知道它做的功能是类似的。
在Spring中,还有一个更加轻量级的模板引擎,叫做SPEL–一个表达式语言。你在@Value注解中所使用的语法就是它,它们都是类似的技术。

这些类库,是我在工作中最长用到的,也是关注最多的。其实,一个Spring就够大家折腾的了,但Spring的功能有时候仍然不够,因为它本身更多的是一个整合型的工具,我们不得不关注到更底层的技术。
正是得益于这些稳定、可靠的类库,我们的应用开发才能够如此迅速。想要什么功能?找个类库吧,大体就能实现,这就是目前的开发幸福的地方。

Hutool

https://hutool.cn/docs/#/
Hutool 是一个开源的 Java 工具包,提供了丰富的工具类和方法,用于简化 Java 开发中的各种常见任务。它的设计目标是简洁、易用、高效,旨在提升 Java 开发者的开发效率。下面是关于 Hutool 的详细解释:
特点和功能:

  1. 模块化设计: Hutool 按照功能进行模块化设计,每个模块都专注于一个特定的领域,比如 hutool-core、hutool-extra、hutool-http 等,使得开发者可以根据需求选择性地引入所需的模块,避免不必要的依赖。
  2. 丰富的工具类和方法: Hutool 提供了大量的工具类和方法,涵盖了字符串处理、集合操作、日期时间处理、加解密、文件操作、HTTP 请求、Excel 操作、JSON/XML 解析等各种常见任务,减少了开发者的重复劳动。
  3. 简洁易用的 API: Hutool 的 API 设计简洁清晰,易于理解和使用,让开发者能够快速上手,并提高代码的可读性和可维护性。
  4. 高效性能: Hutool 在设计上注重性能优化,尽量避免不必要的资源消耗和性能损耗,提供高效的工具方法和算法实现。
  5. 广泛的应用场景: Hutool 可以应用于各种 Java 开发场景,包括后端服务开发、Web 开发、数据处理、系统管理等领域,满足不同项目的需求。
    主要模块介绍:
  6. hutool-core: 提供了核心的工具类和方法,包括字符串处理、集合操作、日期时间处理、加解密、正则表达式等。
  7. hutool-extra: 提供了额外的工具类和方法,包括高级加解密算法、数据压缩、邮件发送、定时任务等。
  8. hutool-http: 用于处理 HTTP 请求和响应的模块,提供了简洁易用的 API,支持多种 HTTP 方法和 HTTPS 请求。
  9. hutool-json: 用于 JSON 数据处理的模块,提供了 JSON 解析、JSON 转换、JSON 格式化等功能。
  10. hutool-db: 数据库操作模块,提供了简化数据库操作的工具类和方法,支持主流的数据库操作。
  11. hutool-cache: 缓存操作模块,提供了缓存管理、缓存策略、缓存过期处理等功能,方便开发者处理缓存数据。
  12. hutool-log: 日志操作模块,提供了日志记录、日志级别控制、日志格式化等功能,方便开发者进行日志管理。
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;public class HutoolExample {public static void main(String[] args) {// 使用字符串工具类String str = "Hello, Hutool!";System.out.println(StrUtil.upperFirst(str));  // 输出:Hello, Hutool!// 发送 HTTP GET 请求String response = HttpUtil.get("http://example.com");System.out.println("Response: " + response);}
}

在这个示例中,我们使用了 Hutool 的字符串工具类 StrUtil 和 HTTP 请求工具类 HttpUtil,展示了 Hutool 的简洁易用的特点。
总的来说,Hutool 是一个功能强大、易于使用的 Java 工具包,可以大幅提升 Java 开发者的开发效率,适用于各种 Java 开发场景。
Hutools还提供了许多其他实用工具
除了上述功能外,Hutools还提供了许多其他实用工具,如网络操作、正则表达式、Excel读写、图片处理等。你可以在官方文档中了解更多使用示例和详细说明:h
Hutools是一个Java工具库,提供了许多常用的工具类和方法,方便Java开发人员进行开发。下面是Hutools的一些特性和使用示例:

   <!--工具类--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency><!--hutool工具--><hutool.version>5.5.8</hutool.version>
  1. 字符串操作:
String str = "hello, world!";
String result = StrUtil.reverse(str); // 字符串反转
boolean isBlank = StrUtil.isBlank(str); // 判断字符串是否为空或空白字符
String[] parts = StrUtil.split(str, ','); // 字符串拆分
  1. 集合操作:
List<Integer> list = CollUtil.newArrayList(1, 2, 3);
int[] array = CollUtil.toArray(list); // List转为数组
List<Integer> reversed = CollUtil.reverse(list); // 集合反转
List<Integer> intersection = CollUtil.intersection(list, otherList); // 集合交集
  1. 文件操作:
File file = FileUtil.file("path/to/file.txt");
String content = FileUtil.readUtf8String(file); // 读取文件内容
List<String> lines = FileUtil.readLines(file, CharsetUtil.CHARSET_UTF_8); // 逐行读取文件
FileUtil.copy(sourceFile, targetFile, true); // 复制文件
  1. 加密解密:
String encrypted = SecureUtil.md5(str); // MD5加密
String encoded = SecureUtil.des("key").encryptHex(str); // DES加密
String decrypted = SecureUtil.des("key").decryptStr(encoded); // DES解密
  1. 日期时间处理:
DateTime now = DateUtil.date(); // 获取当前时间
String format = DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"); // 格式化日期
DateTime nextMonth = DateUtil.offsetMonth(now, 1); // 获取下个月的日期
long betweenDays = DateUtil.between(date1, date2, DateUnit.DAY); // 计算日期间隔天数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B树(B-Tree)详解

B树&#xff08;B-Tree&#xff09;详解 B树&#xff08;B-Tree&#xff09;是一种自平衡的树状数据结构&#xff0c;专为磁盘和其他直接访问的辅助存储设备而设计&#xff0c;广泛应用于数据库和文件系统中。B树通过减少磁盘I/O操作的次数&#xff0c;显著提高了数据存取的效…

Eclipse 创建 XML 文件

Eclipse 创建 XML 文件 Eclipse 是一个广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了强大的工具和功能来支持各种编程语言和技术的开发。在本文中&#xff0c;我们将探讨如何在 Eclipse 中创建 XML 文件&#xff0c;以及如何利用 Eclipse 的特性来提…

Jvm基础(一)

目录 JVM是什么运行时数据区域线程私有1.程序计数器2.虚拟机栈3.本地方法栈 线程共享1.方法区2.堆 二、对象创建1.给对象分配空间(1)指针碰撞(2)空闲列表 2.对象的内存布局对象的组成Mark Word类型指针实例数据&#xff1a;对齐填充 对象的访问定位句柄法 三、垃圾收集器和内存…

Python基础知识——(005)

文章目录 P21——20. 比较运算符 P22——21. 逻辑运算符 P23——22. 位运算和运算符的优先级 P24——23. 本章总结和章节习题 P21——20. 比较运算符 示例3-17—比较运算符的使用&#xff1a; P22——21. 逻辑运算符 示例3-18—逻辑运算符的使用&#xff1a; print(True and T…

【C语言】逗号运算符详解 - 《不起眼的 “逗号”》

目录 C语言逗号运算符详解1. 逗号运算符的定义1.1 基本语法1.2 执行顺序 2. 逗号运算符的用法2.1 用于循环2.1.1 示例 2.2 用于表达式组合2.2.1 示例 3. 逗号运算符的应用场景3.1 宏定义3.1.1 示例 3.2 条件运算符中的应用3.2.1 示例 4. 总结5. 参考文献6. 结束语 C语言逗号运算…

UBUNTU22 安装QT5.15.2 记录

安装QT预置安装软件包 sudo apt install gcc sudo apt install g sudo apt install clang sudo apt install clang sudo apt install make sudo snap install cmake --classic sudo apt-get install build-essential sudo apt install libxcb-xinerama0 #安装OpenGL核心库 su…

天途无人机林业应用解决方案

林业应用现状分析 森林环境较为复杂&#xff0c;人员无法快速到达现场&#xff0c;工作人员通常会面临监控盲区&#xff0c;林区爬山涉水困难多&#xff1b;森林防火重要性不可忽视&#xff0c;2019年全国共发生森林火灾2345起&#xff0c;森林防火仍为重中之重&#xff1b;环…

go语言的基础语法

基础语法 与python、vue等类似&#xff0c;go语言也分常量和变量等&#xff0c;常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型&#xff08;整数型、浮点型和复数&#xff09;和字符串型&#xff0c;值不可更改&#xff0c;表达式只支…

(南京观海微电子)——boost电路原理及作用

BOOST升压电路 boost升压电路是六种基本斩波电路之一&#xff0c;是一种开关直流升压电路&#xff0c;它可以使输出电压比输入电压高。主要应用于直流电动机传动、单相功率因数校正&#xff08;PFC&#xff09;电路及其他交直流电源中。 BOOST升压电源是利用开关管开通和关断的…

Excel表格导出

1.后端 /*** 导出一对一线下课签到表* param response* param selectedArriveTime* param selectedClassRoom*/RequestMapping(value "/exportExcel", method {RequestMethod.GET})public void exportExcel(HttpServletResponse response, String selectedArriveTi…

【网络安全的神秘世界】Error:Archives directory /var/cache/apt/archives/partial is missing.

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨问题描述 在kali中想要安装beef-xss软件包时&#xff0c;发生如下报错&#xff1a; Error: Archives directory /var/cac…

我在高职教STM32——串口通信(3)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

编织文字之美:WebKit的CSS文本格式化能力全解析

编织文字之美&#xff1a;WebKit的CSS文本格式化能力全解析 在网页设计中&#xff0c;文本不仅是传递信息的媒介&#xff0c;更是展现美学的重要元素。WebKit&#xff0c;作为Safari、QQ浏览器等众多浏览器的内核&#xff0c;提供了强大的CSS文本格式化支持。通过CSS&#xff…

Kubernetes Service 之 LoadBalancer

Kubernetes 之 LoadBalancer 定义 负载均衡器 (LoadBalancer) 是 Kubernetes 中用来对外暴露 Service 服务的&#xff0c;它可以将服务集中到一个公共 IP 上。我们常用 MetalLB 作为自建均衡器。 使用 安装 MetalLB kubectl apply -f https://raw.githubusercontent.com/m…

pandas库方法汇总介绍

目录 1. assign() 新增一列 1. assign() 新增一列 >>> df pd.DataFrame({temp_c: [17.0, 25.0]}, ... index[Portland, Berkeley]) >>> dftemp_c Portland 17.0 Berkeley 25.0Where the value is a callable, evaluated on df: &…

vue slot:为什么 $slots 无值而 $scopedSlots 有值?

在 Vue.js 中&#xff0c;$slots 和 $scopedSlots 是组件实例上用于访问插槽内容的两个属性&#xff0c;但它们各自有不同的用途和表现方式&#xff0c;特别是在处理作用域插槽&#xff08;scoped slots&#xff09;时。 $slots $slots 是一个包含所有插槽内容的对象。对于普…

使用Python爬虫下载视频源码

一、引言(●ˇ∀ˇ●) 在当今互联网时代&#xff0c;视频内容已成为人们获取信息和娱乐的重要方式。有时&#xff0c;我们可能希望将这些视频下载到本地&#xff0c;以便在没有网络的情况下观看。本文将介绍如何使用Python编写一个简单的爬虫。 二、环境准备&#x1f618; 在…

Nginx部署前端项目尝试 - windows版

前端还是要学一点服务器端的东西&#xff0c;才能更好的理解一些知识 1、项目打包 生成dist 2、下载nginx解压&#xff0c;start nginx 启动 浏览器输入 localhost 显示如下页面表示启动成功 3、配置nginx server {listen 8080;# ip 不要加http 前后不要加 /server_name…

结合金融场景的Scipy模块编程

结合金融场景的Scipy模块编程 数据链接&#xff1a;https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码&#xff1a;c6ys import numpy as np import pandas as pd import statsmodels import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-se…

蓝牙耳机推荐哪个品牌?四款必入热门蓝牙耳机品牌推荐

面对市场上琳琅满目的蓝牙耳机品牌和型号&#xff0c;选择一款合适的蓝牙耳机可能会令人感到困惑&#xff0c;蓝牙耳机推荐哪个品牌&#xff1f;为了帮助大家做出明智的决策&#xff0c;我将带来四款必入热门蓝牙耳机品牌推荐&#xff0c;均是我自用还不错的&#xff0c;大家可…