Spring Boot Bean 使用规范
理解 Spring Boot 的 Bean 加载原理后,更重要的是在实际开发中正确使用。本文从用户角度出发,总结 Bean 的使用规范和最佳实践。 1. Bean 定义方式 Spring 提供了多种定义 Bean 的方式,各有适用场景: // ========== 方式一:@Component 及其派生注解 ========== // 最常用,适合业务组件 @Component // 通用组件 @Service // 业务服务层 @Repository // 数据访问层 @Controller // Web 控制器 @RestController // RESTful API 控制器(@Controller + @ResponseBody) @Configuration // 配置类 // 示例 @Service public class UserServiceImpl implements UserService { // 业务逻辑 } // ========== 方式二:@Configuration +...
OpenCode 架构详解
OpenCode 是一个开源的 AI 编程助手,类似于 Claude Code,使用 TypeScript 开发。本文将深入分析 OpenCode 的架构设计,帮助你理解其内部工作原理。 1. 整体架构概览 OpenCode 采用模块化的分层架构设计,主要由以下几个核心组件构成: ┌─────────────────────────────────────────────────────────────┐ │ CLI Interface │ ├─────────────────────────────────────────────────────────────┤ │ Session Manager │ ├─────────────────────────────────────────────────────────────┤ │ ┌──────────────┐ ┌────────────...
Java Guava
Google Guava 是 Google 开发的 Java 核心库,提供了集合、缓存、并发、字符串处理、I/O 等领域的增强工具。相比 Apache Commons,Guava 更现代化,设计理念更接近函数式编程风格。 概述 Guava 的设计哲学: 不可变优先:大量使用不可变集合 预防式设计:快速失败(fail-fast),尽早暴露问题 函数式风格:Predicate、Function、Supplier 等函数式接口 性能优化:经过 Google 大规模生产环境验证 版本要求:Guava 33.x 需要 Java 8+,充分利用 Stream 和 Optional。 Maven 依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>33.5.0-jre</version> </dependency> 注意:Guava 有两个版本:guava(JRE)和 guava-a...
Java Apache Commons
Apache Commons 是 Apache 软件基金会提供的一系列 Java 工具库,它们是 Java 生态中最成熟、使用最广泛的基础设施之一。本文介绍几个最常用的 Commons 库。 概述 Apache Commons 项目起源于 Jakarta 项目,目的是提供可复用的 Java 组件。这些库填补了 JDK 标准库的空白,提供了大量实用工具方法。 核心价值:减少样板代码、处理边界情况、提供经过生产验证的实现。 Commons Lang3 最基础也最常用的库,扩展了 java.lang 包的功能。 Maven 依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.20.0</version> </dependency> 字符串工具 - StringUtils import org.apache.commons.lang3.StringUtils;...
Logback 详解:Java 日志框架的核心与实践
Logback 是 Java 生态系统中使用最广泛的日志框架之一,作为 Log4j 的继任者和 SLF4J 的原生实现,它以其卓越的性能、灵活的配置和丰富的功能成为现代 Java 应用的首选日志解决方案。 1. Logback 简介 1.1 什么是 Logback Logback 由 Log4j 创始人 Ceki Gülcü 开发,设计上分为三个核心模块: 模块 作用 logback-core 基础框架,为其他两个模块提供支持 logback-classic SLF4J 的原生实现,包含核心日志功能 logback-access 与 Servlet 容器集成,提供 HTTP 访问日志功能 1.2 为什么选 Logback 性能优势: - 初始化速度比 Log4j 快约 10 倍 - 内存占用更少 - 异步 Appender 吞吐量更高 - 自动重载配置无需重启应用 功能优势: - 原生支持 SLF4J - 条件化配置(if/then/else) - 自动压缩归档日志 - 更强大的过滤器 2. 核心架构 2.1 三大核心组件 // Logger - 日...
mybatis
1. 什么是 MyBatis MyBatis 是一个半自动化的持久层框架,它将 SQL 语句从 Java 代码中解耦出来,放在 XML 配置文件或注解中。与 Hibernate 等全自动 ORM 框架不同,MyBatis 不会自动生成 SQL,而是让开发者直接编写 SQL,从而获得更高的灵活性和性能控制。 MyBatis 的核心组件 组件 作用 生命周期 SqlSessionFactoryBuilder 构建 SqlSessionFactory 方法局部变量,用完即弃 SqlSessionFactory 生产 SqlSession 的工厂 应用整个生命周期 SqlSession 执行 SQL 的核心接口 请求级别,用完必须关闭 Mapper 接口 定义 SQL 操作的接口 应用整个生命周期 MyBatis 的工作流程 配置文件 → SqlSessionFactory → SqlSession → Mapper → SQL 执行 → 结果映射 配置文件:mybatis-config.xml 或 Spring Boot 的 application...
Spring Boot Common Annotations
SpringBoot 的注解系统是其"约定优于配置"哲学的核心体现。这篇文章不讲虚的,只讲实际开发中真正会用到的注解。我会按照功能分类,每个注解都配上最简示例。 1. 核心启动注解 @SpringBootApplication 这是 SpringBoot 应用的入口注解,一个组合注解,等价于三个注解的叠加: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 它的三个组成部分: @SpringBootConfiguration - 标记为配置类(本质是 @Configuration 的特化) @EnableAutoConfiguration - 启用自动配置机制 @ComponentScan - 自动扫描当前包及子包下的组件 实用主义提示:别自己拆这三个注...
Spring Boot Startup
Spring Boot 中的各种原理解析说一说 1. Spring Boot 启动原理 1.1 入口点:SpringApplication.run() @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 是一个复合注解: @SpringBootConfiguration // 继承 @Configuration @EnableAutoConfiguration // 开启自动配置 @ComponentScan( excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), ...
Golang Struct Tag
Struct Tag 是 Go 语言中一个简洁但极其强大的特性。它允许你为结构体字段附加元数据,这些元数据可以被反射读取,广泛用于序列化、ORM、验证等场景。 基本语法 Struct Tag 是紧跟在字段类型后面的反引号字符串: type User struct { Name string `json:"name"` Age int `json:"age,omitempty"` Email string `json:"email"` } 语法规则 使用反引号 ` 包裹,不是双引号 由键值对组成,格式为 key:"value" 多个 tag 用空格分隔 值必须用双引号包裹 type Product struct { ID int `json:"id" db:"product_id" validate:"required"` Name string `json:"name" db:"product_name"` } 核心应用场景 1. JSON 序列化 ...
Golang Versions
1.26 Go 1.26(2026 年 2 月 10 日发布) 是 Go 历史上改动范围最广的一次小版本更新之一!虽然没有像 1.18 泛型那样“颠覆性”,但它在语言体验、性能、工具链和标准库四个维度都做了大量实打实的改进,被很多人称为“史上最舒服的小版本”。 下面我按重要程度给你捋一捋最值得关注的点(基于官方 release notes + blog): 1. 语言层面两处“真香”改动(最实用) new(expr) 终于支持表达式了! 以前想创建一个带初始值的指针超级麻烦: // Go 1.25 及以前 age := yearsSince(born) p := &age 现在一行搞定: // Go 1.26 Age: new(yearsSince(born)), // *int // 或者更爽的 p := new(42) // *int,指向 42 q := new(User{Name: "Hao"}) // *User JSON、Protobuf、配置结构体、optional 参数场景直接起飞,少写一堆...




