在 Spring Boot Web 后端开发中,注解(Annotation)扮演着核心角色,它们极大地简化了配置、依赖管理、请求映射及数据持久化等流程。本文将按功能分类,梳理常用注解的作用、用法与典型场景,并辅以代码示例,助你全面掌握并灵活运用。
1. 核心启动与配置注解
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@SpringBootApplication | 标记主启动类,组合了 @Configuration、@EnableAutoConfiguration、@ComponentScan。 | 加在启动类上。 | Spring Boot 应用的入口。 |
@Configuration | 声明一个类为配置类,可包含 @Bean 方法。 | 加在类上。 | 定义额外的配置 Bean。 |
@EnableAutoConfiguration | 开启 Spring Boot 自动配置,根据依赖自动配置 Bean。 | 通常由 @SpringBootApplication 组合。 | 自动配置场景。 |
@ComponentScan | 定义组件扫描路径,默认扫描当前包及其子包。 | 加在配置类上,可指定 basePackages。 | 扫描 @Component、@Service 等注解的类。 |
@PropertySource | 指定属性文件加载到 Spring Environment。 | 加在配置类上,指定文件位置。 | 加载自定义配置文件。 |
@Value | 注入配置文件中的属性值。 | 加在字段、方法参数或方法上。 | 从 application.properties 或自定义配置中取值。 |
@ConfigurationProperties | 将配置文件中的属性绑定到 Java Bean 上。 | 加在类上,需配合 @EnableConfigurationProperties 或 @Component 使用。 | 批量绑定配置属性。 |
@Import | 导入一个或多个配置类。 | 加在配置类上。 | 组合多个配置类。 |
@ImportResource | 导入 XML 配置文件。 | 加在配置类上,指定 XML 路径。 | 整合旧版 XML 配置。 |
2. 控制器与请求映射注解
这部分注解主要用于处理 HTTP 请求,是构建 RESTful API 的基础。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Controller | 标记一个类为 Spring MVC 控制器,通常返回视图。 | 加在类上。 | 传统 MVC 应用,返回页面。 |
@RestController | 组合 @Controller + @ResponseBody,返回值直接作为 HTTP 响应体。 | 加在类上。 | RESTful API 开发。 |
@RequestMapping | 映射 HTTP 请求到控制器方法,可配置路径、方法等。 | 类或方法上。 | 通用请求映射。 |
@GetMapping / @PostMapping | 分别组合 @RequestMapping(method = GET/POST)。 | 方法上。 | 处理特定 HTTP 方法请求。 |
@PutMapping / @DeleteMapping | 分别对应 PUT 和 DELETE 请求。 | 方法上。 | 资源更新与删除。 |
@PatchMapping | 组合 @RequestMapping(method = PATCH)。 | 方法上。 | 部分更新请求。 |
@RequestBody | 将 HTTP 请求体绑定到方法参数(自动反序列化)。 | 方法参数上。 | 接收 POST/PUT 请求中的 JSON 数据。 |
@RequestParam | 将请求参数绑定到方法参数。 | 方法参数上。 | 获取 URL 中的查询参数。 |
@PathVariable | 将 URL 模板变量绑定到方法参数。 | 方法参数上。 | 获取 RESTful URL 中的路径变量。 |
@RequestHeader | 将请求头信息绑定到方法参数。 | 方法参数上。 | 获取 Token、User-Agent 等。 |
@CookieValue | 将 Cookie 值绑定到方法参数。 | 方法参数上。 | 获取 Cookie 中的值。 |
@ModelAttribute | 将请求参数绑定到 Model 对象,或在方法执行前添加模型属性。 | 方法参数或方法上。 | 表单提交绑定对象。 |
3. 依赖注入与组件注册注解
Spring 的核心在于 IoC 容器,这些注解帮助管理 Bean 的生命周期与依赖关系。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Component | 将一个类标记为 Spring 管理的通用组件。 | 加在类上。 | 任意层组件,自动扫描注册。 |
@Service | 标注业务逻辑层组件,是 @Component 的特化。 | 加在类上。 | Service 层实现类。 |
@Repository | 标注数据访问层组件,Spring 会自动转换持久层异常。 | 加在类上。 | DAO 层实现类。 |
@Autowired | 按类型自动装配依赖。 | 字段、构造器、setter 方法上。 | 注入依赖 Bean。 |
@Qualifier | 与 @Autowired 配合,指定按名称装配。 | 与 @Autowired 一起使用。 | 同一类型有多个 Bean 时指定具体 Bean。 |
@Primary | 当存在多个相同类型的 Bean 时,优先注入被标注的 Bean。 | 加在 Bean 类或 @Bean 方法上。 | 确定首选 Bean。 |
@Resource | Java 标准注解,默认按名称装配。 | 字段或 setter 方法上。 | 按名称注入,避免类型歧义。 |
@Lazy | 延迟初始化 Bean,直到第一次使用才创建。 | 加在类或 @Bean 方法上。 | 优化启动时间,避免循环依赖。 |
@Scope | 定义 Bean 的作用域(如 singleton、prototype)。 | 加在类或 @Bean 方法上。 | 控制 Bean 的生命周期。 |
@PostConstruct | 标注在初始化方法上,在依赖注入后执行。 | 加在方法上。 | Bean 初始化后的自定义逻辑。 |
@PreDestroy | 标注在销毁方法上,在 Bean 销毁前执行。 | 加在方法上。 | 释放资源等清理操作。 |
4. 数据访问(JPA / Spring Data)注解
针对数据库交互,JPA 注解提供了强大的 ORM 映射能力。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Entity | 标记一个类为 JPA 实体类。 | 加在类上。 | 定义与数据库表映射的实体。 |
@Table | 指定实体对应的数据库表名。 | 加在类上。 | 自定义表名、schema 等。 |
@Id | 标记主键字段。 | 加在字段上。 | 标识实体主键。 |
@GeneratedValue | 配置主键生成策略。 | 加在主键字段上。 | 指定主键自动生成方式。 |
@Column | 配置字段与数据库列的映射。 | 加在字段上。 | 精确控制列属性。 |
@Transient | 标记字段不持久化到数据库。 | 加在字段上。 | 忽略某个字段(如计算属性)。 |
@OneToOne / @OneToMany | 一对一、一对多关联关系。 | 加在关联字段上。 | 实体间关联关系。 |
@ManyToOne / @ManyToMany | 多对一、多对多关联关系。 | 加在关联字段上。 | 复杂实体关联。 |
@Query | 在 Repository 方法上定义自定义 JPQL 或 SQL 查询。 | 加在 Repository 方法上。 | 复杂查询,非方法命名能表达。 |
@Modifying | 标识方法执行更新操作(配合 @Query)。 | 加在 Repository 方法上。 | 执行 UPDATE/DELETE 操作。 |
@Transactional | 声明事务边界(可加在类或方法上)。 | 类或方法上。 | 控制事务。 |
5. 事务管理注解
事务是保证数据一致性的关键,Spring 提供了声明式事务支持。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Transactional | 声明式事务管理,可配置传播行为、隔离级别、超时等。 | 类或方法上。 | 需要事务支持的业务方法。 |
6. 缓存注解
通过缓存减少数据库压力,提升系统性能。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@EnableCaching | 开启缓存功能。 | 加在配置类或启动类上。 | 启用 Spring 缓存抽象。 |
@Cacheable | 方法执行前先查询缓存,若存在则直接返回。 | 方法上。 | 缓存方法结果,适用于读多写少。 |
@CachePut | 总是执行方法,并将结果更新到缓存。 | 方法上。 | 更新缓存中的数据。 |
@CacheEvict | 清除缓存。 | 方法上。 | 删除缓存项。 |
@Caching | 组合多个缓存注解。 | 方法上。 | 同时应用多个缓存操作。 |
@CacheConfig | 类级别共享缓存配置(如缓存名称)。 | 类上。 | 统一指定缓存名称等。 |
7. 异步与定时任务注解
处理耗时任务与周期性调度,让主线程更轻量。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@EnableAsync | 开启异步方法支持。 | 加在配置类或启动类上。 | 启用 @Async 注解。 |
@Async | 标注方法为异步执行,调用后立即返回。 | 方法上。 | 执行耗时任务(如发送邮件)。 |
@EnableScheduling | 开启定时任务支持。 | 加在配置类或启动类上。 | 启用 @Scheduled 注解。 |
@Scheduled | 标注方法为定时任务,可配置 cron 表达式。 | 方法上。 | 定时执行任务(如数据清理)。 |
8. 异常处理与控制器增强
统一处理全局异常,提升用户体验与接口规范性。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@ControllerAdvice | 全局控制器增强,可定义全局异常处理。 | 加在类上。 | 统一处理控制器层的异常。 |
@RestControllerAdvice | 组合注解,用于 REST API 全局异常处理。 | 加在类上。 | RESTful 风格的全局异常处理。 |
@ExceptionHandler | 标注在方法上,处理特定异常。 | 方法上,通常位于 @ControllerAdvice 类中。 | 处理控制器抛出的异常。 |
@InitBinder | 自定义数据绑定器,如日期格式化。 | 方法上。 | 处理请求参数到对象的绑定。 |
9. 跨域支持注解
解决前后端分离架构下的跨域问题。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@CrossOrigin | 允许跨域请求,可配置允许的来源、方法等。 | 类或方法上。 | 解决前后端分离的跨域问题。 |
10. 条件化配置注解(自动配置相关)
这些注解常用于自动配置类或自定义条件配置,灵活控制 Bean 的创建。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@ConditionalOnClass | 当类路径下存在指定类时生效。 | 加在配置类或 @Bean 方法上。 | 根据依赖库决定配置。 |
@ConditionalOnMissingBean | 当容器中不存在指定 Bean 时生效。 | 同上。 | 提供默认 Bean,若用户未定义则创建。 |
@ConditionalOnProperty | 当配置文件中存在指定属性且值匹配时生效。 | 同上。 | 根据配置项决定是否启用。 |
@ConditionalOnWebApplication | 当项目是 Web 应用时生效。 | 同上。 | Web 环境下的特定配置。 |
11. 测试注解
Spring Boot 提供了丰富的测试注解,便于进行单元测试与集成测试。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@SpringBootTest | 加载完整的 Spring 应用上下文进行集成测试。 | 加在测试类上。 | 测试整个 Spring Boot 应用。 |
@WebMvcTest | 仅测试 Web 层,只加载控制器相关的 Bean。 | 加在测试类上。 | 测试 Controller 层。 |
@DataJpaTest | 仅测试 JPA 层,自动配置内存数据库等。 | 加在测试类上。 | 测试 Repository 层。 |
@MockBean | 在测试上下文中创建 Mockito 的 Mock 对象替换原有 Bean。 | 字段或类上。 | 模拟依赖,隔离测试。 |
@Transactional | 在测试中用于事务回滚,保证测试数据隔离。 | 方法或类上。 | 测试后自动回滚数据库更改。 |
12. Lombok 常用注解(简化代码)
Lombok 通过注解减少样板代码,提升开发效率。注意区分 Lombok 的 @Value 与 Spring 的 @Value。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Data | 生成 getter/setter、equals()、hashCode()、toString() 等。 | 加在类上。 | 简化 POJO 类。 |
@NoArgsConstructor | 生成无参构造器。 | 加在类上。 | JPA 实体等需要无参构造。 |
@AllArgsConstructor | 生成全参构造器。 | 加在类上。 | 方便创建对象。 |
@RequiredArgsConstructor | 生成包含 final 或 @NonNull 字段的构造器。 | 加在类上。 | 依赖注入时配合 @NonNull。 |
@Builder | 实现建造者模式。 | 加在类上。 | 构建复杂对象。 |
@Slf4j | 自动生成 log 字段(基于 SLF4J)。 | 加在类上。 | 日志记录。 |
@Value (Lombok) | 生成不可变类(所有字段为 private final,不生成 setter)。 | 类上。 | 创建 DTO 或值对象。 |
13. Spring Security 常用注解
安全认证是 Web 应用的重要环节,以下注解用于权限控制。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@EnableWebSecurity | 启用 Spring Security Web 安全功能。 | 加在配置类上。 | 自定义安全配置。 |
@EnableGlobalMethodSecurity | 开启方法级安全控制。 | 加在配置类上。 | 启用方法级别的权限注解。 |
@Secured | 指定方法需要的角色列表。 | 方法上。 | 基于角色的方法访问控制。 |
@PreAuthorize | 方法执行前进行权限表达式校验。 | 方法上。 | 灵活的权限控制(支持 SpEL)。 |
@PostAuthorize | 方法执行后进行权限表达式校验。 | 方法上。 | 根据返回结果进行权限检查。 |
@AuthenticationPrincipal | 获取当前认证用户的 Principal 对象。 | 方法参数上。 | 在控制器中获取当前用户信息。 |
14. 其他常用注解
还有一些辅助性注解,虽不常单独出现,但在特定场景下不可或缺。
| 注解 | 作用 | 用法 | 场景 |
|---|---|---|---|
@Bean | 标注在方法上,将方法返回值注册为一个 Spring Bean。 | 方法上,通常位于 @Configuration 类中。 | 注册第三方库的实例或自定义 Bean。 |
@Profile | 指定 Bean 在某个或某些 profile 环境下生效。 | 类或方法上。 | 不同环境加载不同 Bean。 |
@EventListener | 监听应用程序事件。 | 方法上,参数为事件类型。 | 处理自定义事件或 Spring 内置事件。 |
@EnableTransactionManagement | 启用注解式事务管理。 | 配置类上。 | 如果默认不生效,可手动开启。 |
@ServletComponentScan | 扫描 Servlet 组件(如 Filter、Listener)。 | 启动类或配置类上。 | 使用原生的 Servlet 组件。 |
以上涵盖了 Spring Boot Web 后端开发中绝大多数常用注解,通过理解其作用与场景,结合代码实践,你将能更高效地构建稳健的后端服务。


