一、Spring Boot 启动与配置
| @SpringBootApplication | 启动整个 Spring Boot 项目,一个顶仨 |
| @Configuration | 告诉 Spring:这个类是配置文件,里面可以定义 Bean |
| @ComponentScan | 告诉 Spring 去哪个包下找你写的组件(@Service、@Controller 等) |
| @Bean | 把方法的返回值交给 Spring 管理,变成一个可注入的对象 |
| @Import | 引入其他配置类,让它们生效 |
| @Profile("dev") | 这个类/方法只在 dev 环境下才生效 |
| @ConditionalOnProperty | 配置文件里某个属性满足条件,才注册这个 Bean |
二、Spring 组件注册
| @Component | 标记这个类是个 Spring 组件,让 Spring 自动创建对象管理 |
| @Service | 标记这个类是业务层,和 @Component 功能一样,但语义上告诉你"这是做业务的" |
| @Repository | 标记这个类是数据访问层,还能自动把数据库异常转成 Spring 的异常 |
| @Controller | 标记这个类是控制器,负责接收前端请求(传统网页用) |
| @RestController | = @Controller + @ResponseBody,返回值直接当 JSON 返回(前后端分离必用) |
| @Scope("prototype") | 默认每次注入是同一个对象,加了这个每次注入都是新对象 |
三、Spring 依赖注入
| @Autowired | Spring 自动帮你找到对应的对象,塞进这个变量里(按类型找) |
| @Resource | 和 @Autowired 一样是自动注入,但它优先按名字找,找不到再按类型找 |
| @Qualifier | 配合 @Autowired 使用,当同类型有多个 Bean 时,指定注入哪一个 |
| @Primary | 同类型有多个 Bean 时,标记这个是默认优先注入的 |
| @Value("${key}") | 从 application.yml 配置文件里读值,塞到这个变量里 |
| @RequiredArgsConstructor | Lombok 自动生成一个构造器,final 字段自动注入,替代 @Autowired |
四、Spring MVC 请求处理
| @RequestMapping | 把一个 URL 路径绑定到某个方法上,前端访问这个路径就走这个方法 |
| @GetMapping | 只接收 GET 请求(查数据用) |
| @PostMapping | 只接收 POST 请求(新增数据用) |
| @PutMapping | 只接收 PUT 请求(修改数据用) |
| @DeleteMapping | 只接收 DELETE 请求(删除数据用) |
| @PathVariable | 从 URL 路径里取值,比如 /user/123 里的 123 |
| @RequestParam | 从 ? 后面的查询参数取值,比如 ?page=1&size=10 |
| @RequestBody | 把前端传的 JSON 数据自动转成 Java 对象 |
| @RequestHeader | 从请求头里取值,比如取 Token |
| @ModelAttribute | 把表单数据绑定到对象上 |
| @RestControllerAdvice | = @ControllerAdvice + @ResponseBody,全局统一处理所有 Controller 的异常和返回值 |
五、Spring AOP(面向切面编程)
| @Aspect | 标记这个类是个切面类,用来统一处理公共逻辑(日志、事务、权限等) |
| @Pointcut | 定义一个切入点,告诉 Spring "哪些方法需要被拦截" |
| @Before | 在目标方法执行之前执行的代码 |
| @After | 在目标方法执行之后执行(不管成功失败都执行) |
| @Around | 在目标方法前后都执行,最强大,可以决定方法要不要执行 |
| @AfterReturning | 目标方法正常返回后执行 |
| @AfterThrowing | 目标方法抛异常后执行 |
六、Spring 事务
| @Transactional | 方法里的数据库操作要么全成功,要么全回滚,不会出现数据一半成功一半失败 |
常见参数:
- rollbackFor = Exception.class → 遇到任何异常都回滚(不加的话只回滚 RuntimeException)
- readOnly = true → 告诉数据库"我只查不改",做个性能优化
- propagation = REQUIRED → 当前有事务就加入,没有就新建(默认行为)
七、Spring 缓存
| @EnableCaching | 开启缓存功能,不加这个下面的注解都不生效 |
| @Cacheable | 执行方法前先看 Redis 里有没有,有就直接返回,不走方法体(查缓存) |
| @CachePut | 不管缓存有没有,方法都执行,然后把结果写进缓存(更新缓存) |
| @CacheEvict | 方法执行后,把指定缓存删掉(清除缓存) |
八、Spring 安全
| @EnableWebSecurity | 开启 Spring Security 安全框架 |
| @PreAuthorize | 方法执行之前检查权限,没权限就不让执行 |
| @Secured | 和 @PreAuthorize 类似,但功能更简单,只能判断角色 |
九、Spring 定时任务
| @EnableScheduling | 开启定时任务功能 |
| @Scheduled | 让方法按规则自动执行:fixedRate=每隔多久、cron=按日历规则 |
十、MyBatis 数据库
| @Mapper | 标记这个接口是 MyBatis 的 Mapper,Spring 会自动生成实现类 |
| @MapperScan | 告诉 Spring 去哪个包下找所有 Mapper 接口 |
| @Select / @Insert / @Update / @Delete | 直接在接口方法上写 SQL,不用写 XML |
| @Param | 方法有多个参数时,给每个参数起个名字,SQL 里用 #{名字} 引用 |
| @TableName | 告诉 MyBatis-Plus 这个类对应数据库哪张表 |
| @TableId | 标记哪个字段是主键 |
| @TableField | 标记字段和数据库列的对应关系 |
十一、Java Bean 校验
| @Valid | 放在参数上,触发校验,不通过就抛异常(必须配合 @NotNull 等一起用) |
| @NotNull | 这个值不能是 null |
| @NotBlank | 这个字符串不能是 null、不能是空串 ""、不能全是空格 " " |
| @NotEmpty | 字符串/集合/Map 不能为空(和 @NotBlank 比,它允许全是空格) |
| @Size | 长度/个数必须在指定范围内 |
| @Min / @Max | 数值必须在指定范围内 |
| 必须是合法的邮箱格式 | |
| @Pattern | 必须符合你写的正则表达式 |
十二、Lombok 简化代码
| @Data | 自动帮你生成 getter、setter、toString、equals、hashCode,省得手写 |
| @Getter / @Setter | 只生成 getter 或只生成 setter |
| @ToString | 只生成 toString 方法 |
| @EqualsAndHashCode | 只生成 equals 和 hashCode 方法 |
| @NoArgsConstructor | 自动生成无参构造器 |
| @AllArgsConstructor | 自动生成全参构造器 |
| @RequiredArgsConstructor | 自动给 final 字段生成构造器(常用于替代 @Autowired) |
| @Builder | 自动给你一个 builder 模式,方便创建对象 |
| @Slf4j | 自动创建一个叫 log 的日志对象,直接用 log.info() 打日志 |
十三、Java 原生注解
| @Override | 告诉编译器"我是重写父类方法",写错了方法名编译器会报错提醒你 |
| @Deprecated | 标记这个方法/类已经过时了,别人调用会有删除线警告 |
| @SuppressWarnings | 压制编译器警告,比如"我知道这里有未使用变量,别提醒我了" |
| @FunctionalInterface | 标记这是函数式接口(只有一个抽象方法),可以用 Lambda 表达式 |
| @Inherited | 子类会继承父类的这个注解 |
| @Repeatable | 这个注解可以在同一个地方写多次 |





