
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
对于初学者来说,Spring Boot 的注册功能是一个非常好的入门案例。因为它虽然简单,却几乎把后端开发里最常见的几个核心点都串起来了:接口设计、三层架构、参数校验、统一返回、数据库操作、密码处理、异常处理。当你把这个小功能真正吃透之后,后面再去学登录、JWT、拦截器、权限控制、Redis 缓存,其实都会更顺,因为你已经理解了后端接口最基本的运行方式。一个 Spring Boot 接口,从接收请
至此,登录认证的功能就完成了,这套方案利用 JWT 的无状态特性,配合拦截器的“守门员”机制,实现了轻量级且安全的接口保护。
动态 SQL 标签速查├── 条件判断│ ├── <if> → 满足条件就拼接│ └── <choose> → 多选一(when/otherwise)├── 子句修饰│ ├── <where> → 自动加 WHERE,去开头 AND/OR│ ├── <set> → 自动加 SET,去末尾逗号│ └── <trim> → 自定义前后缀裁剪(where/set 的底层实现)├── 集合迭代│ └──
参数方式注解从哪取传什么路径参数URL 路径段资源标识查询参数@RequestParam / 省略URL?后筛选、分页、排序请求体参数请求体提交的复杂数据请求头参数请求头认证、追踪等控制信息记住一个核心判断逻辑:要定位资源 → 路径参数要筛选资源 → 查询参数要提交数据 → 请求体参数(加 @RequestBody)要传递控制信息 → 请求头参数。
要点核心内容本质条件化的 PropertySource 加载与合并命名激活命令行 > 环境变量 > 配置文件,生产环境推荐命令行或环境变量合并key 级别覆盖,不是文件替换;列表整体覆盖不合并代码控制@Profile控制 Bean 注册,控制测试环境分组实现多 profile 组合单文件---最佳实践敏感信息外部化、默认 profile 兜底、日志按环境隔离、Docker/K8s 运行时注入。
要点记忆口诀代理调用才生效同类this.调用要警惕异常必须抛出去别在 catch 里默默吞掉回滚范围要明确长事务是性能杀手查询加readOnly,事务尽量短。
在面向对象编程(OOP)的语境下,系统功能通常按照业务领域进行纵向划分:用户模块负责用户相关逻辑,订单模块负责订单相关逻辑,支付模块负责支付相关逻辑。这种划分方式使得同一业务领域内的逻辑被内聚到相同的类或模块中。然而,存在一些功能需求,它们并不属于任何一个纵向的业务领域,而是以水平方向贯穿多个模块。这类需求被称为横切关注点(Cross-cutting Concerns)。日志记录:记录方法的入参、
举个最经典的例子——。假设你的商品服务部署了 3 个实例,用户下单时调用扣库存接口。如果没有锁,3 个实例可能同时读到库存为 1,各自判断"还有货",然后都去扣减,结果就是超卖了。本地锁(synchronized、ReentrantLock)只能保证单个 JVM 内的线程安全,管不到其他实例,所以需要一把"所有实例都能看到"的锁,这就是分布式锁。再往深了想,你会发现分布式锁本质上是在解决问题。——
> 是 Java 的 Lambda 语法。ChatModel 是模型抽象层,屏蔽不同大模型的 API 差异,你配了哪个厂商就自动用对应的实现类,不需要自己管。响应式编程的思想是:数据不是一次性给你,而是像水流一样持续推过来,你定义"收到数据时怎么处理"。跟 StringBuilder 类似,都是构建器模式,但 StringBuilder 是你自己拿着对象操作,Lambda 方式是你把操作逻辑交给框
Spring Cloud 提供了 @RefreshScope 注解来自动刷新配置,但在某些场景下需要手动监听 Nacos 配置变更,比如从 Nacos 拉取一个完整的文本文件内容(如 AI 系统提示词),这种非标准 key-value 的配置用 @RefreshScope 不太好处理。本文介绍如何通过 Nacos 原生 API 手动实现配置热更新。







