Spring Boot 常用注解分类速记

按接口层 / 业务层 / 数据层 / 配置层 / Lombok / 微服务 分类整理 · 面试速查完整版

一、接口层注解(Controller 层,接收 HTTP 请求)

@Controller --- 传统 MVC 控制器注解。方法返回字符串默认解析为视图页面(JSP / Thymeleaf),不会直接返回 JSON。需要返回 JSON 时需在方法上额外加 @ResponseBody。

@RestController --- 复合注解 = @Controller + @ResponseBody。后端接口首选,方法返回对象自动序列化为 JSON 响应,不做页面跳转,前后端分离项目标配。

@RequestMapping --- 通用请求路径映射注解,可标注在类或方法上,指定 URL 路径和请求方式,是下面各种 Mapping 注解的父注解。例:@RequestMapping("/user")

@GetMapping --- 等价于 @RequestMapping(method = RequestMethod.GET),绑定 GET 查询请求,用于查询数据接口。

@PostMapping --- 绑定 POST 请求,多用于新增、提交表单数据。

@PutMapping --- 绑定 PUT 请求,多用于全量更新数据。

@DeleteMapping --- 绑定 DELETE 请求,用于删除数据。

@PatchMapping --- 绑定 PATCH 请求,多用于局部更新字段。

@RequestBody --- 接收前端 POST 提交的 JSON 请求体,自动把 JSON 反序列化为 Java 实体对象。

@ResponseBody --- 将方法返回值直接转为 JSON 写入响应体,不解析视图;@RestController 已自带此注解。

@RequestParam --- 从 URL 查询参数或表单数据中提取单个参数值,如 ?name=xxx 中的 name。可设置 required / defaultValue。

@PathVariable --- 从 URL 路径中提取占位符变量值,如 /user/{id} 中的 id,RESTful 风格接口常用。

@RequestHeader --- 从 HTTP 请求头中提取指定字段的值。

@CrossOrigin --- 开启跨域资源共享(CORS),可标注在类或方法上,允许指定来源的前端跨域调用接口。

二、业务与通用组件注解(Service / Component / 依赖注入 / 事务)

@Service --- 标记业务逻辑层实现类,被组件扫描注册为 Spring Bean,语义上表示该类承担业务处理职责。

@Component --- 通用组件注解,将不属于 Controller / Service / Repository 的工具类、公共组件注册为 Spring 容器管理的 Bean。@Service / @Repository / @Controller 本质上都是 @Component 的特化。

@Repository --- 标记数据访问层(DAO)组件,除注册 Bean 外,还会将数据库相关异常转换为 Spring 的 DataAccessException 体系。MyBatis 项目中较少直接使用,原生 JDBC 持久层常用。

@Autowired --- 依赖注入注解,从 Spring 容器中按类型查找匹配的 Bean 并注入。可标注在字段、构造方法或 Setter 方法上。默认按类型注入。

@Qualifier --- 配合 @Autowired 使用,当同一接口有多个实现类时,通过 Bean 名称指定注入哪一个具体实现,解决注入冲突。

@Resource --- 按名称自动注入依赖(JSR-250 标准),默认按字段名匹配,找不到再按类型匹配。与 @Autowired 类似但匹配策略不同。

@Transactional --- 声明式事务注解,标注在类或方法上。方法执行时自动开启事务,正常结束提交,抛出运行时异常时回滚。可配置传播行为、隔离级别、超时、回滚规则等。

面试要点:@Transactional 仅 public 方法生效;同类内方法直接调用会导致事务失效(未经过 Spring 代理对象)。

@Async --- 标记异步执行方法,调用时在独立线程池中异步执行,不阻塞当前线程。需配合 @EnableAsync 开启异步支持。

@Scheduled --- 标记定时任务方法,配合 cron / fixedRate / fixedDelay 属性实现定时调度。需配合 @EnableScheduling 开启调度支持。

@Value --- 读取 yml / properties 配置文件中的单个属性值,如 @Value("${server.port}"),支持 SpEL 表达式。

@ConfigurationProperties --- 批量绑定配置文件中指定前缀的一组属性到 Java 类,适合多配置项封装,需配合 @EnableConfigurationProperties 或 @Component 使用。

三、数据库与 ORM 注解(MyBatis / MyBatis-Plus)

@Mapper --- MyBatis 注解,标注在 Mapper 接口上,MyBatis 为接口生成代理实现类并注册到 Spring 容器,供 Service 层注入调用。

@MapperScan --- 标注在启动类或配置类上,批量扫描指定包路径下的所有 Mapper 接口,无需每个接口都写 @Mapper。

@Param --- MyBatis 注解,标注在 Mapper 接口方法参数上,为参数指定名称,在 XML 中通过 #{name} 引用。多参数场景必须使用。

@Select / @Insert / @Update / @Delete --- MyBatis 注解式 SQL,直接写在 Mapper 接口方法上,无需 XML 文件,适合简单 SQL。

@TableName --- MyBatis-Plus 注解,标注在实体类上,指定该类对应的数据库表名。当实体类名与表名不一致时使用。

@TableId --- MyBatis-Plus 注解,标注在实体类主键字段上,可配置主键生成策略(如 IdType.AUTO 自增、IdType.ASSIGN_ID 雪花算法、IdType.INPUT 手动赋值)。

@TableField --- MyBatis-Plus 注解,标注在非主键字段上,可指定数据库列名、是否为数据库字段、字段填充策略等。字段名与列名不一致或字段非数据库字段时使用。

@TableLogic --- MyBatis-Plus 注解,标记逻辑删除字段,查询时自动过滤已删除记录,删除操作自动转为更新该字段值(软删除)。

四、配置与启动注解(Configuration / Boot 启动)

@SpringBootApplication --- Spring Boot 启动类核心复合注解,包含三个核心注解:@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan。标记在 main 方法所在类上,触发自动装配和组件扫描。

@SpringBootConfiguration --- 本质就是 @Configuration,标记当前类为 Spring Boot 配置类。

@Configuration --- 标记配置类,替代传统 XML 配置文件。类中可使用 @Bean 方法手动注册第三方组件到 Spring 容器。

@Bean --- 标注在 @Configuration 类的方法上,将方法返回值注册为 Spring 容器中的 Bean,方法名默认为 Bean 名称。常用于注册第三方库对象(如 RestTemplate、RedisTemplate 等)。

@EnableAutoConfiguration --- Spring Boot 自动装配核心注解,根据 classpath 中的依赖自动配置相应场景的 Bean(如引入 spring-boot-starter-web 则自动配置 Tomcat、DispatcherServlet 等)。已包含在 @SpringBootApplication 中。

@ComponentScan --- 组件扫描注解,指定扫描包路径,将标注了 @Component / @Service / @Controller / @Repository 等注解的类自动注册为 Bean。已包含在 @SpringBootApplication 中,默认扫描启动类所在包及其子包。

@ConditionalOnProperty --- 条件装配注解,当配置文件中存在指定属性且值匹配时才加载该 Bean,常用于按需开启功能。

@ConditionalOnClass / @ConditionalOnMissingClass --- 条件装配注解,当 classpath 中存在(或不存在)指定类时才加载 Bean,是 Spring Boot 自动装配的核心机制之一。

@ConditionalOnBean / @ConditionalOnMissingBean --- 条件装配注解,当容器中存在(或不存在)指定类型 Bean 时才加载当前 Bean,常用于提供默认实现并允许用户自定义覆盖。

@EnableAsync --- 开启 Spring 异步方法支持,配合 @Async 使用,标注在配置类上。

@EnableScheduling --- 开启 Spring 定时任务调度支持,配合 @Scheduled 使用,标注在配置类上。

@EnableTransactionManagement --- 开启声明式事务管理支持,Spring Boot 在引入 spring-boot-starter-jdbc 后默认已开启,一般无需手动标注。

五、实体类与 Lombok 注解(简化实体代码,项目高频)

@Data --- Lombok 组合注解,标注在实体类上,自动生成所有字段的 getter / setter、toString、equals、hashCode 方法,大幅减少样板代码。面试最常用。

@Getter / @Setter --- Lombok 注解,分别为字段自动生成 getter / setter 方法,可标注在类上(作用于全部字段)或单个字段上。

@NoArgsConstructor --- Lombok 注解,自动生成无参构造方法。

@AllArgsConstructor --- Lombok 注解,自动生成包含所有字段的全参构造方法。

@Builder --- Lombok 注解,为类生成 Builder 模式构造器,支持链式调用创建对象,如 User.builder().name("张三").age(20).build()。

@Slf4j --- Lombok 注解,自动在类中生成 SLF4J 日志对象 log,可直接使用 log.info() / log.error() 等方法记录日志。

@ToString --- Lombok 注解,自动生成 toString 方法,可通过 exclude 属性排除敏感字段。

@EqualsAndHashCode --- Lombok 注解,自动生成 equals 和 hashCode 方法。

六、微服务与 Spring Cloud 注解(扩展)

@EnableDiscoveryClient --- 开启服务注册发现,将当前服务注册到注册中心(如 Nacos / Eureka),Spring Cloud Commons 提供的通用注解。

@EnableFeignClients --- 开启 OpenFeign 远程调用支持,扫描标注了 @FeignClient 的接口并生成代理实现,标注在启动类上。

@FeignClient --- 标注在远程调用接口上,指定目标服务名,接口方法通过注解映射目标服务的 REST 接口,OpenFeign 自动生成 HTTP 调用代理。

@LoadBalanced --- 标注在 RestTemplate Bean 上,开启客户端负载均衡,配合服务注册发现使用,调用时自动从服务实例列表中选择一个发起请求。

@RefreshScope --- Nacos 配置中心动态刷新注解,标注在 Bean 上,当配置中心内容变更时,该 Bean 会被重新创建以加载最新配置,无需重启项目。

面试快速小结

  1. 请求入口:接口层注解负责接收 HTTP 请求、参数解析、返回 JSON(@RestController + @GetMapping 等)。
  2. Bean 管理:@Component / @Service / @Repository 注册 Bean;@Autowired 负责注入 Bean。
  3. 事务:@Transactional 保证数据库操作原子性,注意同类内调用失效问题。
  4. 数据库:MyBatis @Mapper 生成代理;MyBatis-Plus @TableName、@TableId 等做 ORM 映射。
  5. 配置:@Configuration、@Bean、@Value、@ConfigurationProperties 读取和管理配置。
  6. 启动核心:@SpringBootApplication = 配置类 + 自动装配 + 包扫描,三者合一。
  7. Lombok:@Data、@Builder、@Slf4j 简化实体类样板代码,减少 getter / setter 手写。
  8. 微服务:Nacos 服务注册、OpenFeign 远程调用、@RefreshScope 配置动态刷新。
相关推荐
挖掘狂人42 分钟前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
vx_Biye_Design43 分钟前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
吴声子夜歌44 分钟前
Nginx应用与运维——Nginx日志管理
java·运维·nginx
打工仔折腾 AI1 小时前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
guo_wen_qiang1 小时前
云服务器nacos搭建-集群&持久化
java·运维·服务器
明月_清风1 小时前
AI Agent 进入系统层:现在有哪些开源项目在解决这个问题?
人工智能·后端
弈栈录2 小时前
MySQL 事务、索引与锁:后端开发必须掌握的数据库基础
数据库·后端
江江爱编程2 小时前
java零基础保姆级教学01
java·开发语言