15.SpringBoot注解指南

15.SpringBoot注解指南

Spring Boot 注解指南 目录 点击展开目录 Spring Boot 注解指南 目录 核心注解 应用程序相关 组件注解 配置相关注解 配置属性 Bean配置 Web相关注解 请求映射 请求参数 响应处理 数据库相关注解 JPA注解 MyBatis注解 缓存相关注解 安全相关注解 测试相关注解 其他常用注解 依赖注入 切面编程 异步处理 定时任务 验证注解 并发与异步处理注解 异步执行 线程池配置 异步事件处理 重试机制 并发控制 异步任务配置示例 异步任务使用示例 最佳实践建议 注意事项 高级注解使用指南 条件注解 配置属性绑定 日志配置 参数验证 缓存注解 事务管理 安全注解 监控和度量 最佳实践建议 JPA注解详解 实体映射注解 关联关系注解 继承策略注解 查询注解 审计注解 验证注解 复合主键注解 二级缓存注解 最佳实践建议 核心注解 应用程序相关 @SpringBootApplication // 包含@Configuration、@EnableAutoConfiguration和@ComponentScan // 标记主类,Spring Boot应用程序的入口 @EnableAutoConfiguration // 启用Spring Boot的自动配置机制 @ComponentScan // 自动扫描并注册符合条件的组件 @Configuration // 标记配置类,通常与@Bean结合使用 组件注解 @Component // 通用组件注解,标记类为Spring组件 @Service // 标记服务层组件 @Repository // 标记数据访问层组件 @Controller // 标记控制器组件(Spring MVC) @RestController // @Controller和@ResponseBody的组合,用于RESTful Web服务 配置相关注解 配置属性 @ConfigurationProperties(prefix = "app") // 绑定外部配置到类属性 @Value("${property.name}") // 注入配置属性值 @PropertySource("classpath:custom.properties") // 指定配置文件位置 Bean配置 @Bean // 声明一个Bean,通常在@Configuration类中使用 @Scope("singleton") // 指定Bean的作用域(singleton/prototype/request/session) @Conditional // 条件化地创建Bean @Profile("dev") // 指定Bean在特定Profile下创建 Web相关注解 请求映射 @RequestMapping("/path") // 通用请求映射 @GetMapping("/path") // GET请求映射 @PostMapping("/path") // POST请求映射 @PutMapping("/path") // PUT请求映射 @DeleteMapping("/path") // DELETE请求映射 @PatchMapping("/path") // PATCH请求映射 请求参数 @RequestParam // 绑定请求参数 @RequestParam(value = "id", required = false, defaultValue = "0") private String id; @PathVariable // 绑定URL路径变量 @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) @RequestBody // 绑定请求体 @PostMapping("/users") public User createUser(@RequestBody User user) @RequestHeader // 绑定请求头 @CookieValue // 绑定Cookie值 响应处理 @ResponseBody // 将返回值序列化为响应体 @ResponseStatus(HttpStatus.OK) // 指定响应状态码 @ExceptionHandler(Exception.class) // 处理特定异常 @ControllerAdvice // 全局控制器增强,通常用于全局异常处理 数据库相关注解 JPA注解 @Entity // 标记JPA实体类 @Table(name = "users") // 指定数据库表名 @Id // 标记主键字段 @GeneratedValue // 主键生成策略 @Column // 指定列属性 @Transactional // 声明事务 MyBatis注解 @Mapper // 标记MyBatis映射器接口 @Select("SELECT * FROM users") // SQL查询语句 @Insert("INSERT INTO users(name) VALUES(#{name})") // SQL插入语句 @Update("UPDATE users SET name = #{name}") // SQL更新语句 @Delete("DELETE FROM users WHERE id = #{id}") // SQL删除语句 缓存相关注解 @Cacheable // 缓存方法返回值 @Cacheable(value = "users", key = "#id") public User getUser(Long id) @CacheEvict // 清除缓存 @CacheEvict(value = "users", allEntries = true) public void clearCache() @CachePut // 更新缓存 @CachePut(value = "users", key = "#user.id") public User updateUser(User user) @EnableCaching // 启用缓存支持 安全相关注解 @Secured("ROLE_ADMIN") // 基于角色的安全控制 @PreAuthorize("hasRole('ADMIN')") // 方法执行前的权限检查 @PostAuthorize("returnObject.username == authentication.name") // 方法执行后的权限检查 @RolesAllowed({"USER", "ADMIN"}) // 指定允许访问的角色 测试相关注解 @SpringBootTest // Spring Boot测试类 @Test // 测试方法 @MockBean // 模拟Bean @AutoConfigureMockMvc // 配置MockMvc @WebMvcTest // MVC测试 @DataJpaTest // JPA测试 其他常用注解 依赖注入 @Autowired // 自动注入依赖 @Qualifier("beanName") // 指定注入的Bean名称 @Resource // 按名称注入 @Inject // JSR-330依赖注入 切面编程 @Aspect // 声明切面 @Before("execution(* com.example.service.*.*(..))") // 前置通知 @After // 后置通知 @Around // 环绕通知 @AfterReturning // 返回通知 @AfterThrowing // 异常通知 异步处理 @EnableAsync // 启用异步处理 @Async // 标记异步方法 定时任务 @EnableScheduling // 启用定时任务 @Scheduled(fixedRate = 5000) // 定时执行,固定速率 @Scheduled(cron = "0 0 12 * * ?") // 使用cron表达式定时执行 验证注解 @Valid // 触发验证 @NotNull // 非空验证 @Size(min = 2, max = 30) // 字符串长度验证 @Email // 邮箱格式验证 @Pattern(regexp = "^[0-9]{10}$") // 正则表达式验证 并发与异步处理注解 异步执行 @EnableAsync // 在配置类上使用,启用异步功能 @Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); executor.setQueueCapacity(25); executor.initialize(); return executor; } } @Async // 标记方法为异步执行 @Async public CompletableFuture<String> asyncMethod() { // 异步处理逻辑 return CompletableFuture.completedFuture("result"); } @Async("specificExecutor") // 指定使用特定的执行器 @Async("threadPoolTaskExecutor") public void asyncMethodWithExecutor() { // 使用指定执行器的异步处理 } 线程池配置 @EnableScheduling // 启用定时任务调度功能 @Scheduled // 配置定时任务 @Scheduled(fixedRate = 5000) // 固定速率执行 @Scheduled(fixedDelay = 5000) // 固定延迟执行 @Scheduled(initialDelay = 1000, fixedRate = 5000) // 初始延迟后固定速率执行 @Scheduled(cron = "0 0 12 * * ?") // 使用cron表达式 // 自定义线程池配置 @Configuration public class ThreadPoolConfig { @Bean public ThreadPoolTaskExecutor threadPoolTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); // 核心线程数 executor.setMaxPoolSize(20); // 最大线程数 executor.setQueueCapacity(200); // 队列容量 executor.setKeepAliveSeconds(60); // 线程空闲时间 executor.setThreadNamePrefix("async-"); // 线程名前缀 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略 executor.initialize(); return executor; } } 异步事件处理 @EventListener // 标记方法为事件监听器 @EventListener public void handleContextStart(ContextStartedEvent event) { // 处理事件 } @TransactionalEventListener // 在事务上下文中处理事件 @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleAfterCommit(CustomEvent event) { // 事务提交后处理事件 } @Async @EventListener // 异步事件处理 public void handleAsyncEvent(CustomEvent event) { // 异步处理事件 } 重试机制 @EnableRetry // 启用重试机制 @Configuration @EnableRetry public class RetryConfig { } @Retryable // 配置方法重试 @Retryable( value = {SQLException.class}, // 指定异常类型 maxAttempts = 3, // 最大重试次数 backoff = @Backoff(delay = 1000) // 重试延迟 ) public void retryableOperation() { // 可能失败的操作 } @Recover // 重试失败后的恢复方法 @Recover public void recover(SQLException e) { // 处理最终失败的情况 } 并发控制 @Lock // 分布式锁注解(需要集成相关实现,如Redisson) @Lock(key = "#userId", timeout = 10) public void processUserData(String userId) { // 需要加锁的处理逻辑 } // 自定义并发限制注解示例 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ConcurrencyLimit { int value() default 10; // 并发数限制 long timeout() default 1000; // 超时时间 } 异步任务配置示例 @Configuration public class AsyncTaskConfig { @Bean public AsyncTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 核心线程配置 executor.setCorePoolSize(10); executor.setMaxPoolSize(20); executor.setQueueCapacity(100); // 线程配置 executor.setThreadNamePrefix("Async-Task-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待任务完成配置 executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(60); return executor; } } 异步任务使用示例 @Service public class AsyncService { @Async public CompletableFuture<String> asyncMethodWithResult() { try { Thread.sleep(1000); return CompletableFuture.completedFuture("Async result"); } catch (InterruptedException e) { return CompletableFuture.failedFuture(e); } } @Async public void asyncMethodWithException() throws Exception { throw new Exception("Async method exception"); } // 异步方法组合示例 public CompletableFuture<String> combinedAsyncMethods() { CompletableFuture<String> future1 = asyncMethodWithResult(); CompletableFuture<String> future2 = asyncMethodWithResult(); return CompletableFuture.allOf(future1, future2) .thenApply(v -> future1.join() + " " + future2.join()); } } 最佳实践建议 // 1. 异常处理 @Async public CompletableFuture<String> asyncWithExceptionHandling() { try { // 异步处理逻辑 return CompletableFuture.completedFuture("result"); } catch (Exception e) { return CompletableFuture.failedFuture(e); } } // 2. 超时处理 @Async public CompletableFuture<String> asyncWithTimeout() { return CompletableFuture.supplyAsync(() -> { // 处理逻辑 return "result"; }).orTimeout(5, TimeUnit.SECONDS); } // 3. 异步任务进度跟踪 @Async public void asyncWithProgress(ProgressTracker tracker) { tracker.start(); // 处理逻辑 tracker.progress(50); // 更多处理 tracker.complete(); } 注意事项 @Async方法的返回类型: ...

December 25, 2025 · Ralph Wren · 浏览量: --
17.SpringBoot

17.SpringBoot

SpringBoot 核心知识体系 目录 点击展开目录 SpringBoot 核心知识体系 目录 SpringBoot基础概念 SpringBoot简介 SpringBoot核心理念 SpringBoot优势 核心特性 起步依赖(Starter Dependencies) 常用Starter对比表 版本演进 SpringBoot版本历史 版本选择建议 与Spring Framework关系 架构关系图 关系说明 快速入门 环境搭建 开发环境要求 Maven配置 创建第一个应用 主启动类 第一个Controller 运行应用 项目结构详解 标准项目结构 包结构最佳实践 配置文件详解 application.yml配置 多环境配置 自动配置机制 条件注解 配置属性 注解体系 核心注解 Web开发 REST接口 异常处理 数据访问 JPA配置 事务管理 安全框架 Spring Security配置 JWT支持 微服务 服务注册 熔断降级 最佳实践 项目结构 配置最佳实践 启动流程与原理 启动流程详解 自动配置原理 条件注解详解 META-INF/spring.factories配置 配置属性绑定 配置属性绑定示例 配置属性使用 常见面试题 基础概念面试题 自动配置面试题 Web开发面试题 测试框架 单元测试 集成测试 切片测试 切片测试 高级特性 缓存机制 异步处理 事件机制 异步处理 事件机制 监控与管理 部署与运维 打包与部署 Dockerfile示例 Docker Compose示例 生产级Dockerfile Kubernetes部署配置 CI/CD Pipeline配置 监控和日志配置 运维脚本 常见问题与解决方案 配置问题 依赖问题 性能问题 Debug 模式性能卡顿排查 安全问题 部署问题 性能问题 参考资源 官方文档 社区资源 书籍推荐 入门级书籍 进阶级书籍 源码分析书籍 学习路径建议 实践项目推荐 初级项目 中级项目 高级项目 认证考试 技术社区 持续学习建议 文档总结 📚 知识覆盖范围 🎯 文档特色 🚀 使用建议 📈 持续更新 SpringBoot基础概念 SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。SpringBoot采用了约定优于配置的理念,大量的自动配置减少了开发人员的工作量。 ...

December 25, 2025 · Ralph Wren · 浏览量: --
18.Logback

18.Logback

Logback 日志框架详解 目录 点击展开目录 简介 核心组件 Logger Appender Layout 配置文件 基本结构 配置加载顺序 常用配置 日志级别 输出到控制台 输出到文件 滚动策略 异步日志 日志模式 PatternLayout 常用转换符 与框架集成 Spring Boot集成 Web应用集成 最佳实践 性能优化 日志分类 MDC使用 常见问题 简介 Logback 是由 log4j 创始人设计的另一个开源日志组件,是 log4j 的继任者。它与 slf4j 结合使用,性能比 log4j 更好,是目前 Java 社区中最流行的日志框架之一,也是 Spring Boot 的默认日志实现。 主要特点 更快的实现 更少的内存占用 自动重新加载配置文件 条件处理配置文件 自动压缩归档日志文件 优雅地从 I/O 错误中恢复 自动删除旧的日志文件 支持 Prudent 模式(多进程安全) 核心组件 Logback 架构图: graph TD A[Logback架构] --> B[Logger] A --> C[Appender] A --> D[Layout] B --> B1[Root Logger] B --> B2[Named Logger] C --> C1[ConsoleAppender] C --> C2[FileAppender] C --> C3[RollingFileAppender] C --> C4[AsyncAppender] C --> C5[DBAppender] D --> D1[PatternLayout] D --> D2[HTMLLayout] D --> D3[JSONLayout] C2 --> C21[日志文件] C3 --> C31[滚动策略] C3 --> C32[触发策略] C31 --> C311[TimeBasedRollingPolicy] C31 --> C312[SizeAndTimeBasedRollingPolicy] C31 --> C313[FixedWindowRollingPolicy] Logger Logger 是 Logback 的核心组件,用于记录日志。每个 Logger 都有一个名称,通常使用类的全限定名作为 Logger 的名称。 ...

December 25, 2025 · Ralph Wren · 浏览量: --
55.Node.js技术指南

55.Node.js技术指南

55.Node.js 技术指南 目录 点击展开目录 55.Node.js 技术指南 目录 Node.js 概述 什么是Node.js Node.js发展历史 Node.js特点与优势 Node.js应用场景 Node.js与其他技术对比 JavaScript语法基础 变量与数据类型 函数与作用域 对象与数组 ES6+新特性 类与面向对象 Node.js 核心架构 V8引擎 事件循环机制 libuv库 Node.js运行时架构 单线程与多进程模型 Node.js 核心模块 文件系统模块(fs) 路径模块(path) HTTP模块 事件模块(events) 流模块(stream) Buffer与二进制处理 异步编程模型 回调函数模式 Promise与async/await 事件驱动编程 错误处理机制 包管理与模块系统 npm包管理器 npx 工具链 npx 核心机制 npx wrangler 详解 CommonJS模块规范 ES Modules package.json配置详解 Web开发框架 Express框架 Koa框架 NestJS框架 Fastify框架 框架对比与选型 数据库操作 MySQL操作 MongoDB操作 Redis操作 ORM框架使用 性能优化 内存管理与优化 CPU密集型任务处理 集群与负载均衡 性能监控与分析 安全实践 常见安全漏洞 安全编码规范 认证与授权 部署与运维 PM2进程管理 Docker容器化部署 日志管理 监控与告警 实战案例 RESTful API开发 WebSocket实时通信 微服务架构实践 常见问题与排查 内存泄漏排查 性能瓶颈定位 常见错误处理 Playwright 自动化测试 核心特性 安装与初始化 基础使用 常用操作 运行测试 常用技巧 总结 Node.js 概述 什么是Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它使 JavaScript 能够脱离浏览器在服务器端运行。Node.js 采用事件驱动、非阻塞 I/O 模型,使其轻量且高效,非常适合构建数据密集型的实时应用程序。 ...

January 4, 2026 · Ralph Wren · 浏览量: --