MVC中的拦截器实现案例
MVC 拦截器
Spring MVC 拦截器对应HandlerInterctor接口,该接口位于org.springframework.web.servlet的包中,定义了三个方法,若要实现该接口,就要实现其三个方法:
前置处理(preHandle()方法):该方法在执行控制器方法之前执行。返回值为Boolean类型,如果返回false,表示拦截请求,不再向下执行,如果返回true,表示 ...
Java学习笔记:关键字与保留字
在Java中,关键字和保留字是两类具有特殊意义的标识符,它们被语言本身占用,不能作为变量名、方法名、类名等自定义标识符使用。理解它们的区别与用途,是掌握Java语法的第一步。
查看官网关键字和保留字:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
1. 关键字(Keyword)
关键字是Java语 ...
MVC快速入门
前言
什么是MVC
MVC英文是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计规范,本质上也是一种解耦。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数 ...
Java学习笔记:注释
1. 什么是注释?
注释(comment)。对Java程序中的代码进行文字性解释说明。不会被Java编译和运行。
2. Java注释
Java中的注释主要分为三类:
类型
语法
用途
单行注释
// 注释内容
对代码进行简短说明,编译时忽略
多行注释
/* 注释内容 */
可跨行,用于较长的解释或临时屏蔽代码块
文档注释
/** 注释内容 */
J ...
Java 中的 实现、泛型
上次我们聊了 Java 面向对象的三大特性,封装、继承、多态。今天我们来聊聊 实现、泛型。
一、实现(implements)
定义:"实现" 是 Java 中类与接口(Interface) 之间的关系,关键字是 implements。接口是一组 "行为规范"(只定义方法签名,不包含具体实现),而实现类需要兑现这些规范,即编写接口中所有抽象方 ...
Java学习笔记:开发初体验:HelloWorld
一般初学者开发第一个Java程序,我们习惯称之为:HelloWorld。
1. Java程序的开发步骤
Java程序开发一般分为三步:编写、编译、运行。
将Java代码编写到以.java结尾的源文件中。
通过javac.exe命令对源文件(.java)进行编译,编译后在当前源文件所在目录会自动生成一个或多个以.class结尾的字节码文件。
通过java.exe命令 ...
Spring Boot 4.0.5 正式发布,又一项技术被弃用了。。
大家好,我是R哥。
一周时间,Spring Boot 连发两个版本:
这版本速度也太快了吧,跟不上了,不过好在都是小版本更新,主要是一些 bug 修复和依赖升级,没什么大问题。
本次更新要点
Spring Boot 4.0.5 版本主要包含 17 个漏洞修复、文档改进和依赖升级,重点说说 Spring Boot 4.0.4 版本一些主要的更新要点。
1、ZipkinS ...
Netty 高性能网络编程:从零构建高并发服务器
前言
Netty 是一个高性能、异步事件驱动的网络应用框架,广泛应用于 RPC、消息队列、游戏服务器等高并发场景。本文从零开始,带你掌握 Netty 的核心概念和实战技巧。
一、为什么选择 Netty?
传统 Java NIO 的痛点:API 复杂,学习曲线陡峭;需要手动管理 Selector、Channel、Buffer;容易出现 bug;没有高层抽象,代码冗长 ...
CompletableFuture 实战:Java 异步编程高性能实战指南
前言
在高并发场景下,同步阻塞是性能杀手。Java 8 引入的 CompletableFuture 彻底改变了异步编程的写法。
一、为什么需要 CompletableFuture?
传统 Future 的痛点:
future.get() 会阻塞当前线程
无法链式组合多个异步任务
异常处理繁琐
二、基础用法
CompletableFuture<String> future = CompletableFuture.supplyAsyn ...
Spring Cloud微服务实战:服务注册、网关、负载均衡全家桶指南
前言
Spring Cloud是Java微服务开发的事实标准,但很多开发者对它的核心组件还是一知半解。本文从零搭建一个完整的微服务项目,涵盖服务注册(Nacos)、网关(Spring Cloud Gateway)、负载均衡(LoadBalancer)三大核心组件。
一、项目架构
microservice-demo/
├── service-gateway/ # API网关 (8080)
├── se ...
Docker容器化Spring Boot:从构建到部署的完整实战
前言
容器化部署已经成为现代Java应用的标准配置。本文用完整的实战案例,带你从零构建Spring Boot应用的Docker镜像,并实现生产级部署。
一、环境准备
Docker Desktop (Windows/Mac) 或 Docker Engine (Linux)
Spring Boot 3.x 项目
JDK 17+
二、项目结构
my-springboot-app/
├── src/
├── Dockerfile # ...
算法~时间戳计算两个日期是否为同天同时同分
UTC时间戳验证两个日期是否为同一天的核心原理在于:时间戳是绝对的时间点,而“天”是依赖于特定时区(如UTC)的人为划分区间。通过将两个绝对时间点转换到同一时区后,比较它们的年、月、日是否完全相同。
具体原理可分以下几步理解:
1. 时间戳的本质
Unix时间戳(通常指秒数或毫秒数)是从 1970-01-01 00:00:00 UTC 开 ...
AI Agent 开发实战:用LangChain4j构建你的第一个Java智能体
前言
AI Agent是2026年最热门的技术方向之一。本文用LangChain4j带你从零开始构建一个Java智能体,实现对话、工具调用和记忆功能。
一、什么是AI Agent?
AI Agent(智能体)是能够自主决策并执行任务的AI系统,核心能力:
理解意图:解析用户自然语言
规划任务:分解复杂任务为步骤
调用工具:使用外部API或函数
记忆上下 ...
Mysql的行级锁到底是怎么加的?
开篇结论
加锁的对象是索引,加锁的基本单位是 next-key lock,它是由记录锁和间隙锁组合而成的,next-key lock 是左开右闭区间,而间隙锁是左开右开区间。
在只使用记录锁或者间隙锁就能避免幻读现象的场景下, next-key lock 就会退化成记录锁或间隙锁。
假设这个表,id 是主键索引(唯一索引),age 是普通索引(非唯一 ...
Java线程池完全指南:从原理到实战的7个关键点
前言
线程池是Java并发编程的核心组件,也是面试必考题。本文从原理到实战,带你全面掌握线程池的7个关键点。
一、为什么需要线程池?
每次创建线程都有开销:
线程创建需要调用系统API,开销大
线程销毁也需要开销
大量线程会消耗内存
线程池解决问题:
线程复用,减少创建销毁开销
控制最大并发数
提供任务队列,缓冲 ...
MySQL锁机制:从全局锁到行级锁的深度解读
全局锁
flush tables with read lock
执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞:
对数据的增删改操作,比如 insert、delete、update等语句;
对表结构的更改操作,比如 alter table、drop table 等语句。
全局锁主要应用于做全库逻辑备份,这样在备份数据库期间,不会因为数据或表结 ...
Redis缓存实战:彻底解决缓存穿透、击穿、雪崩三大难题
前言
Redis缓存是Java开发中最常用的技术之一,但缓存穿透、击穿、雪崩三大问题也是面试高频考题。本文结合实战代码,带你彻底搞懂这三大难题。
一、缓存穿透
问题描述
查询一个数据库和缓存中都不存在的key,每次请求都打到数据库,大量请求可能拖垃数据库。
解决方案
1. 缓存空对象
@Service
public class UserService {
...
揭秘MySQL索引分类
索引的作用
说白了索引就是数据的目录,根据索引去查数据必然比在库中一行记录一行记录的查更快
索引分类
按数据结构分类
Mysql的数据是存储在磁盘中的,每次从磁盘中读取数据都需要进行一次IO。一个表的数据在磁盘上由于插入顺序的原因肯定不是顺序存放,如果按照表字段内容顺序查找,如果一个500万条数据的表,要找的刚好 ...
Hutool 的 `TimedCache` 到期会自动清理吗? ——————hutool cache的"惰性清理"和"定期清理"
是的,Hutool 的 TimedCache 会在到期时自动清理缓存项,但它的清理机制是基于"惰性清理"和"定期清理"两种策略结合,而不是立即清理。
🎯 核心清理机制
1. 惰性清理(Lazy Eviction)
TimedCache<String, Object> cache = new TimedCache<>(1000); // 默认过期时间1秒
cache.put("key1", "value1");
// 在get时检查是否过 ...
Java 26 发布了, 我人麻了。。
大家好,我是R哥。
Java 25 刚发布半年之久(Java 25 正式发布),很多人可能还没听说过,现在 Java 26 又来了,我真的人麻了啊。。。
需要注意的是,Java 26 并不是 LTS(长期支持版本),千万不要用在生产环境里,因为它许多特性还在预览阶段,可能会有不兼容的变动。
废话不多说了,下面我们来看看 Java 26 都有哪些新 ...