news 2026/6/10 18:00:23

【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/6/10 12:40:09

如何开发一个有效的 AI 法律助理

原文&#xff1a;towardsdatascience.com/how-to-develop-an-effective-ai-powered-legal-assistant-096550746987 在这篇文章中&#xff0c;我描述了如何创建一个用于搜索挪威最高法院判决的应用程序。这个应用程序是一个有用的工具&#xff0c;可以快速了解不同主题的判决&am…

作者头像 李华
网站建设 2026/6/10 12:24:56

单元测试中的Mock技术:Mockito与PowerMock深度对比

在当今追求高质高效交付的软件开发领域&#xff0c;单元测试是保障代码质量的基石。而Mock技术&#xff0c;作为隔离被测对象、模拟复杂依赖的关键手段&#xff0c;已成为测试从业者工具箱中的必备品。在众多Mock框架中&#xff0c;Mockito与PowerMock因其强大的功能和广泛的社…

作者头像 李华
网站建设 2026/6/10 12:39:43

如何处理时间序列异常值

原文&#xff1a;towardsdatascience.com/how-to-deal-with-time-series-outliers-28b217c7f6c2 在本文中&#xff0c;我们将探讨&#xff1a; 不同类型的时间序列异常值 基于预测和估计的异常值检测方法 如何使用替换处理不想要的异常值 异常值的类型 异常值是显著偏离正常…

作者头像 李华
网站建设 2026/6/10 14:25:37

跨国项目中的测试挑战:时差、文化差异与质量标准的统一

跨国测试的新常态‌随着业务的国际化扩张和分布式团队模式的普及&#xff0c;软件项目的生命周期早已跨越国界。测试团队不再局限于同一办公室内协作&#xff0c;而是需要与分布在不同时区、拥有不同文化背景的成员共同工作。这种模式极大地扩展了人才库和工作效率&#xff0c;…

作者头像 李华