news 2026/2/3 3:51:35

【Spring】常用注解分类整理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Spring】常用注解分类整理

Spring常用注解分类整理

一、核心容器注解

1. 组件标识类

注解作用应用场景
@Component通用组件标识,将类注册为Spring Bean工具类、通用服务类
@Service业务逻辑层组件(语义化)Service层,如UserService
@Repository数据访问层组件,自动转换持久层异常DAO层、MyBatis Mapper接口
@ControllerWeb控制器组件(返回视图)MVC架构的Controller层
@RestController@Controller + @ResponseBody组合(返回JSON)RESTful API接口层

示例

@RestController@RequestMapping("/api/users")publicclassUserController{@AutowiredprivateUserServiceuserService;}

2. 依赖注入类

注解作用应用场景
@Autowired按类型自动装配(Spring核心注解)构造函数、字段、Setter注入
@Qualifier指定Bean名称,解决同一类型多个Bean冲突配合@Autowired精准匹配
@Resource按名称自动装配(JDK标准注解)需要与Spring解耦的场景
@Value注入配置文件中的值或SpEL表达式注入application.yml中的配置项

示例

@ServicepublicclassOrderService{// 推荐:构造函数注入(无需@Autowired)privatefinalUserServiceuserService;publicOrderService(UserServiceuserService){this.userService=userService;}@Value("${app.max-order-limit}")privateIntegermaxOrderLimit;}

3. Bean作用域与生命周期

注解作用应用场景
@Scope指定Bean作用域(singleton/prototype/request/session)每次请求需要新实例时(如多线程环境)
@PostConstructBean属性设置后执行初始化方法缓存预热、连接池初始化
@PreDestroyBean销毁前执行清理方法资源释放、线程池关闭
@Lazy延迟初始化Bean优化启动速度、大对象按需加载

二、Web层注解(Spring MVC)

1. 请求映射

注解作用应用场景
@RequestMapping通用请求路径映射(支持GET/POST等)类或方法级别路由定义
@GetMappingGET请求快捷注解查询接口(如/api/users/{id}
@PostMappingPOST请求快捷注解创建资源接口
@PutMappingPUT请求快捷注解全量更新接口
@PatchMappingPATCH请求快捷注解部分更新接口
@DeleteMappingDELETE请求快捷注解删除资源接口

2. 参数处理

注解作用应用场景
@RequestParam获取URL查询参数或表单参数?page=1&size=10分页参数
@PathVariable获取URL路径变量REST风格/users/{userId}
@RequestBody将请求体JSON转为Java对象POST/PUT请求接收复杂对象
@ResponseBody将返回值转为JSON响应(@RestController已包含)需要返回JSON而非视图时
@RequestHeader获取请求头信息获取AuthorizationTrace-Id
@CookieValue获取Cookie值读取会话Cookie

示例

@GetMapping("/{id}")publicResponseEntity<UserDTO>getUser(@PathVariableLongid,@RequestParam(defaultValue="false")booleanincludeDetails){returnResponseEntity.ok(userService.getUser(id,includeDetails));}

3. 响应与异常

注解作用应用场景
@ResponseStatus指定HTTP响应状态码创建资源返回201,无内容返回204
@ExceptionHandler局部异常处理方法单个Controller内异常处理
@ControllerAdvice全局异常处理类统一处理所有Controller异常
@RestControllerAdvice@ControllerAdvice + @ResponseBody全局异常返回JSON

三、数据访问与事务注解

1. JPA/Hibernate

注解作用应用场景
@Entity标识JPA实体类数据库表映射对象
@Table指定实体对应的表名自定义表名、schema
@Id标识主键字段实体主键
@GeneratedValue主键生成策略自增ID、UUID
@Column字段映射配置列名、长度、非空约束

2. MyBatis

注解作用应用场景
@Mapper标识MyBatis Mapper接口DAO接口(替代XML配置)
@Select/Insert/Update/Delete直接写SQL语句简单SQL场景

3. 事务管理

注解作用应用场景
@Transactional声明式事务管理Service层方法,确保数据一致性
@EnableTransactionManagement启用事务管理功能主配置类上开启事务支持

事务传播行为@Transactional(propagation = ...)):

  • REQUIRED:默认,需要事务(无则创建,有则加入)
  • REQUIRES_NEW:总是创建新事务
  • NESTED:嵌套事务(需数据库支持)

四、AOP注解

注解作用应用场景
@Aspect标识切面类日志、权限、性能监控等横切关注点
@Pointcut定义切点表达式复用切点定义
@Before前置通知权限校验、参数验证
@After后置通知(finally块)资源释放
@AfterReturning返回后通知日志记录、结果处理
@AfterThrowing抛出异常后通知异常日志、告警
@Around环绕通知(功能最强大)性能统计、事务管理、缓存

示例

@Aspect@ComponentpublicclassLoggingAspect{@Around("@within(org.springframework.web.bind.annotation.RestController)")publicObjectlogAround(ProceedingJoinPointjoinPoint)throwsThrowable{longstart=System.currentTimeMillis();try{returnjoinPoint.proceed();}finally{log.info("执行时间: {}ms",System.currentTimeMillis()-start);}}}

五、配置与条件注解

1. 配置类

注解作用应用场景
@Configuration标识配置类(替代XML配置)第三方Bean注册、复杂配置
@Bean注册第三方库BeanRestTemplateDataSource
@Import导入其他配置类模块化配置拆分
@PropertySource加载外部properties文件自定义配置文件
@ConfigurationProperties批量绑定配置文件到Bean配置项分组管理

2. 条件注解

注解作用应用场景
@Conditional条件化注册Bean自定义条件逻辑
@ConditionalOnClass类路径存在某类时注册自动配置(如存在DataSource类)
@ConditionalOnMissingBean缺失某Bean时注册提供默认实现,可被覆盖
@ConditionalOnProperty配置项匹配时注册功能开关(如app.feature.xxx.enabled=true

六、异步与调度注解

注解作用应用场景
@Async异步执行方法不影响主流程的操作(如发邮件、日志)
@EnableAsync启用异步功能主配置类
@Scheduled定时任务(cron/fixedDelay/fixedRate)定时数据同步、清理任务
@EnableScheduling启用定时任务主配置类

示例

@Async("taskExecutor")publicCompletableFuture<String>sendEmailAsync(Stringto){// 异步发送邮件}@Scheduled(cron="0 0 3 * * ?")// 每天凌晨3点执行publicvoidcleanExpiredData(){// 清理过期数据}

七、缓存注解

注解作用应用场景
@Cacheable缓存查询结果低频变更的数据(如字典、配置)
@CachePut更新缓存(不影响方法执行)数据更新时同步缓存
@CacheEvict删除缓存数据删除时清除缓存
@Caching组合多个缓存操作复杂缓存逻辑
@EnableCaching启用缓存功能主配置类

示例

@Cacheable(value="users",key="#id")publicUsergetUser(Longid){returnuserMapper.selectById(id);}@CacheEvict(value="users",key="#id")publicvoiddeleteUser(Longid){userMapper.deleteById(id);}

八、测试相关注解

注解作用应用场景
@SpringBootTest启动完整Spring容器进行集成测试全流程功能测试
@WebMvcTest仅测试MVC层(轻量级)Controller层单元测试
@MockBean创建Mock对象注入容器隔离外部依赖
@DataJpaTest仅测试JPA数据访问层Repository层测试

九、总结与选型建议

高频组合

  1. REST API@RestController+@RequestMapping+@GetMapping/PostMapping
  2. 分层架构@Controller@Service@Repository
  3. 依赖注入:构造函数 +@Autowired(或无需注解)
  4. 事务控制@Service+@Transactional
  5. 配置管理@ConfigurationProperties+@Configuration

最佳实践

  • 构造函数注入:优先于字段注入,可测试性更好
  • @Qualifier:解决同一类型多个Bean冲突
  • @RestControllerAdvice:统一异常处理和响应封装
  • @ConditionalOnProperty:实现功能开关和灰度发布
  • @Async + @Transactional:异步方法无法传递事务上下文

通过合理使用这些注解,可以实现声明式编程,大幅减少样板代码,提升开发效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 10:29:12

人工智能之数学基础 离散数学:第一章 集合论与逻辑推理

人工智能之数据基础 离散数学 第一章 集合论与逻辑推理—公式关注公众号 文章目录人工智能之数据基础 离散数学前言一、集合论&#xff08;Set Theory&#xff09;1. 基本概念2. 集合运算3. 集合恒等式&#xff08;定律&#xff09;✅ Python 实现&#xff1a;集合运算与幂集二…

作者头像 李华
网站建设 2026/1/25 5:14:24

Monodepth2:自监督单目深度估计的改进-k学长深度学习专栏

本文来源&#xff1a;k学长的深度学习宝库&#xff0c;点击查看源码&详细教程。深度学习&#xff0c;从入门到进阶&#xff0c;你想要的&#xff0c;都在这里。包含学习专栏、视频课程、论文源码、实战项目、云盘资源等。 1、Monodepth v2 的背景和动机 在 Monodepth&#…

作者头像 李华
网站建设 2026/2/2 15:00:59

缓存测试:Redis/Memcached数据一致性与击穿、雪崩问题模拟

测试视角下的缓存风险‌ 在高并发、高性能的现代应用架构中&#xff0c;缓存&#xff08;以Redis和Memcached为代表&#xff09;已成为标准配置。然而&#xff0c;它并非“银弹”&#xff0c;其引入在解决读写性能瓶颈的同时&#xff0c;也带来了新的复杂性和故障模式。对于测…

作者头像 李华
网站建设 2026/1/28 14:13:28

软件测试工程师的35岁危机:是确有其事,还是伪命题?

一个行业热议的十字路口‌ 在技术快速迭代的软件行业&#xff0c;“35岁危机”已成为一个高频词&#xff0c;常与开发、运维等岗位紧密相连。然而&#xff0c;当这一话题延伸至软件测试领域时&#xff0c;却引发了两极分化的讨论&#xff1a;一方认为测试工程师同样面临年龄增…

作者头像 李华
网站建设 2026/2/1 20:52:49

夸克网盘不限速 - 公益解析站

今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取&#xff1a;放在这里了&#xff0c;可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的教学 输入我给…

作者头像 李华