🎉🎉《Spring Boot实战案例合集》目前已更新193个案例,我们将持续不断的更新。文末有电子书目录。
💪💪永久更新承诺
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。
💌💌如何获取
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.2
1. 简介
你以为已经吃透了Java的类、循环和Stream API?真正的Java黑科技正潜伏在语言深处!这些被90%开发者忽略的隐藏特性,正是区分普通程序员与架构大师的关键——它们能让你的代码性能飙升300%,同时减少50%的代码量。
本篇文章介绍15个Java中鲜为人知却极具价值的特性,它们能让你的代码更简洁、执行更高效、表达力更强。
public class TryWithResource {public static void main(String[] args) {try (MyResource res = new MyResource("资源A")) {res.action();} catch (Exception e) {System.err.println("发生异常: " + e.getMessage());}}}class MyResource implements AutoCloseable {private String name;public MyResource(String name) {this.name = name;System.out.println(name + " 已创建");}public void action() {System.out.println(name + " 正在工作...");}@Overridepublic void close() {System.out.println(name + " 已关闭");}}
这确保了资源清理并避免内存泄漏——对于数据库连接等非常的关键。
自Java 15中引入的文本块简化了大型字符串的处理,尤其适合编写html,json,sql。如下示例:
String json = """{"author": "pack_xg","title": "Spring Boot 3实战案例200讲","price": 70}""";
自 Java 10 起,var 关键字使你能够编写简洁的代码,同时保持类型安全。
var list = new ArrayList<String>() ;
更简洁,尤其当类型显而易见时——但不要过度使用。
自Java 10起新增了 CompactNumberFormat 类,可立即让数字更易读。如下示例:
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT);System.out.println(fmt.format(120000));fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);System.out.println(fmt.format(120000));
12万120K
记录类(Record)不仅是数据容器——你还可以在其中定义方法和静态字段。如下示例:
public class RecordDemo {record Point(int x, int y) {// 实例方法public double distanceToOrigin() {return Math.sqrt(x * x + y * y);}// 静态字段public static final Point ORIGIN = new Point(6, 6);}public static void main(String[] args) {Point p = new Point(3, 4);System.out.println(p.distanceToOrigin());System.out.println(Point.ORIGIN);}}
5.0Point[x=6, y=6]
轻量级虚拟线程(19提出?,Java 21正式发布)支持数百万级并发任务,且几乎无额外开销。如下示例:
// 1.创建虚拟线程Thread.startVirtualThread(() -> System.out.println(Thread.currentThread()));// 2.创建虚拟线程执行器var executor = Executors.newVirtualThreadPerTaskExecutor();// 提交100万个任务for (int i = 0; i < 1_000_000; i++) {executor.submit(() -> {// System.out.println("任务 " + Thread.currentThread().threadId() + " 执行中");});}executor.close();
密封类允许你精确控制哪些其他类可以继承你的类——非常适合定义严格的继承层次结构。如下示例:
// 密封类定义;显式声明子类(这样也就限定了有哪些子类,必须有)public sealed class Shape permits Circle, Rectangle, Triangle {}// 密封类的子类(必须是final/sealed/non-sealed)public final class Circle extends Shape {}// 密封类还可以继承并且声明子类public sealed class Rectangle extends Shape permits Square {}public non-sealed class Triangle extends Shape {}public final class Square extends Rectangle {}
将记录类与模式匹配结合使用,实现更易读的数据解构。如下示例:
record Point(int x, int y) {}public static void main(String[] args) {var obj = new Point(6, 7) ;if (obj instanceof Point(int x, int y)) {System.out.println(x + ", " + y);}}
6, 7
无需手动检查空值,使用这种简洁模式,如下示例:
User user = findUser(id).orElseThrow();
告别冗长的if判断——纯粹的优雅。
public class DayTypeChecker {public static void main(String[] args) {// 示例调用System.out.println(getDayType(DayOfWeek.MONDAY));System.err.println(getDayType(DayOfWeek.SUNDAY));System.out.println(getDayType(DayOfWeek.TUESDAY));}public static String getDayType(DayOfWeek day) {String ret = switch (day) {case MONDAY, FRIDAY, TUESDAY, WEDNESDAY, THURSDAY -> "Workday";case SATURDAY, SUNDAY -> "Weekend";// 显式处理null(防御性编程)case null -> throw new IllegalArgumentException("Day cannot be null");default -> "Unknown";};return ret;}}
WorkdayWeekendWorkday
别再到处用 Math. 搞乱你的代码了:
import static java.lang.Math.*;System.out.println(sqrt(49));
告别Collectors.toList(),Java 16引入了原生toList()方法,如下示例:
// 传统写法List<String> names = Stream.of("A", "B", "C").collect(Collectors.toList());// 新写法List<String> names = Stream.of("A", "B", "C").toList();
Java记录类(Record)可轻松自定义序列化行为,无需冗余代码即可实现DTO和配置类的序列化。
record Config(String key, String value) implements Serializable {private static final long serialVersionUID = 1L;}
直接从Java监控和控制进程。
ProcessHandle.current().info().startInstant().ifPresent(System.out::println);
String user = "pack_xg";int attempts = 3;System.out.println("[%s] 用户 %s 登录失败(尝试次数:%d)".formatted(LocalDateTime.now(), user, attempts));
[] 用户 pack_xg 登录失败(尝试次数:3)
请一定记住!Spring Boot 执行初始化操作的 7 种王炸手段
Spring Boot 又一强大的内置功能,自动记录API请求/响应数据
高级开发!自定义组件通过3种方式解决Spring Boot配置文件中的敏感数据
高级开发!Spring Boot 自定义插件:让功能灵活到飞起
性能优化!Spring Boot 弃用 Jackson,性能提升50%
Spring Boot文件上传5种玩法!@RequestPart最强大
Spring AI:零代码!智能生成SQL,实现数据实时查询!
真香!RestTemplate、RestClient再不要直接使用了,新玩法来了
强大!Spring Boot 通过责任链模式实现服务的动态编排


