工作中常用的注解梳理

注解是贴在类、方法、变量上的标记标签 ,以@开头,本身不执行业务代码。

作用主要有以下几点:

  • 代码标识说明

  • 替代配置文件

  • 自动生成代码

  • 框架识别驱动

  • 数据约束与校验

  • 单元测试

  • 序列化转换

日常工作中常用的注解主要有以下十三类:

  • JDK原生注解
  • JSR303校验注解
  • JAX-RS规范注解
  • SpringMVC注解
  • SpringBoot核心注解
  • SpringCloud分布式注解
  • MyBatis原生SQL注解
  • MyBatis-Plus实体映射注解
  • JUnit测试注解
  • Mock测试框架注解
  • Lombok简化代码注解
  • Jackson序列化注解
  • Fastjson序列化注解。

一、JDK原生注解

1. 基础标记注解

@Override:重写父类 / 接口方法

@Deprecated:标记方法 / 类已过时,不推荐使用

@SuppressWarnings:压制编译器警告

2. 元注解(用来定义注解)

@Target:限定注解作用位置(类、方法、字段等)

@Retention:注解生命周期(源码 / 编译 / 运行时)

@Documented:生成文档时保留注解

@Inherited:子类可继承父类注解

3. 函数式 & 空判断

@FunctionalInterface:标识函数式接口

@SafeVarargs:抑制泛型可变参数警告

@NotNull(jdk8+)非空标记

4. 线程相关

@Native:本地原生方法标识

二、JSR303 常用校验注解

JSR303注解使用时,需注意以下几点:

  • 依赖:spring-boot-starter-validation
  • 实体字段加注解,接口参数加 @Valid 触发校验
  • 自定义提示:message="提示文案"

1. 空值校验

@NotNull:对象不能为 null,空字符串 / 空格允许

@NotBlank:字符串非空、剔除空格后不能为空

@NotEmpty:字符串、集合、数组不能为空

2. 数值范围

@Min:最小值限制

@Max:最大值限制

@Size(min,max):字符 / 集合长度区间

@DecimalMin:小数最小值

@DecimalMax:小数最大值

3. 格式校验

@Email:邮箱格式校验

@Pattern(regexp):正则匹配自定义格式

@Digits:限制整数、小数位数

三、JAX-RS(Restful 规范)

JAX-RS 是 Java 官方的 RESTful 接口开发规范,不是 Spring 的!

常见实现:RestEasy、Jersey、Apache CXF。

1. 请求方法(对应 HTTP)

@GET:查询

@POST:新增 / 提交

@PUT:修改

@DELETE:删除

@HEAD:仅获取响应头

@OPTIONS:跨域预检

2. 路径与参数

@Path("/user"):定义接口路径(类 / 方法上)

@PathParam("id"):获取 URL 路径参数 /user/{id}

@QueryParam("name"):获取 URL 查询参数 ?name=xxx

@FormParam:获取表单参数

@HeaderParam:获取请求头

@CookieParam:获取 Cookie

四、Spring MVC相关

1. 控制器类注解

@Controller:标识普通控制器,返回视图

@RestController:组合注解,@Controller+@ResponseBody,直接返回 JSON

@RequestMapping:类 / 方法统一请求路径前缀

2. 请求类注解

@GetMapping:处理 GET 查询请求

@PostMapping:处理 POST 提交新增

3. 参数接收类注解

@RequestParam:获取 URL 查询参数、表单参数

@RequestBody:接收 JSON 格式请求体

五、Spring Boot相关

1. 启动 & 配置类

@SpringBootApplication:启动主类,三合一注解

@Configuration:标记配置类

@Bean:手动注册 Bean 到容器

@Value:读取配置文件属性

@ConfigurationProperties:批量绑定配置

2. 组件注入

@Component:通用普通组件

@Service:业务服务层

@Repository:数据持久层

@Autowired:自动装配注入

@Qualifier:按名称匹配 Bean

@Resource:JSR 规范注入注解

3.事务注解

@Transactional:开启事务控制

4. AOP 切面

@Aspect:切面类

@Before:前置通知

@After:后置通知

@Around:环绕通知

@Pointcut:切点表达式

5. 全局异常

@ControllerAdvice:全局异常统一处理

@ExceptionHandler:捕获指定异常

6. 跨域 & 缓存

@CrossOrigin:允许跨域请求

@Cacheable:查询缓存

@CachePut:更新缓存

@CacheEvict:清空缓存

7. 测试

@SpringBootTest:加载 Spring 容器做集成测试

@MockBean:模拟注入 Bean 对象

六、Spring Cloud常用注解

1. 注册发现

@EnableEurekaServer:搭建 Eureka 注册中心

@EnableEurekaClient:服务注册到 Eureka

@EnableDiscoveryClient:通用服务注册发现,兼容多注册中心

2. 负载均衡 & 调用

@LoadBalanced:开启 Ribbon 本地负载均衡

@FeignClient:声明 Feign 远程调用接口

3. 网关 & 配置

@RefreshScope:动态刷新配置

@EnableConfigServer:搭建配置中心服务端

@EnableGateway:开启 Spring Cloud 网关

4. 分布式事务

@GlobalTransactional:Seata 全局事务注解

5. 限流授权

@PreAuthorize:网关 / 服务权限校验

七、MyBatis 原生注解(写 SQL 用)

@Select:查询 SQL

@Insert:新增 SQL

@Update:修改 SQL

@Delete:删除 SQL

@Param:给参数起别名(多参数必用)

@Results / @Result:手动映射字段

八、MyBatis-Plus 实体类注解(最常用)

**@TableName:**绑定数据库表名

@TableId:主键字段(必须)

@TableField:普通字段映射。字段名不一样用它;不想插入 / 更新用 exist = false

@Version:乐观锁字段

@LogicDelete:逻辑删除字段

注:

  • MyBatis-Plus 条件构造器,QueryWrapper/LambdaQueryChainWrapper 不是注解,但最常用

九、JUnit 单元测试

@Test:标记测试方法

@DisplayName:给测试类 / 方法起中文名字

@BeforeEach:每个测试方法执行前都运行

@AfterEach:每个测试方法执行后都运行

@BeforeAll:所有方法开始前只执行一次(静态方法)

@AfterAll:所有方法结束后只执行一次(静态方法)

@Disabled:禁用 / 忽略这个测试

@Timeout:设置超时时间

@AssertThrows:测试异常抛出

十、Mock框架注解

Mockito是Java 主流单元测试 Mock 框架,用来模拟外部依赖,隔离代码,快速写单元测试。常用注解如下:

@Mock:创建模拟对象,方法默认无真实逻辑

@Spy:监控真实对象,默认执行原有逻辑

@InjectMocks:将 Mock/Spy 对象注入被测类

@Captor:捕获方法入参

@ExtendWith(MockitoExtension):JUnit5 启用 Mockito

@MockBean:Spring 环境替换容器 Bean 为模拟对象

十一、Lombok

Lombok 可以自动生成代码,不用手写 getter/setter/ 构造器 /toString,大幅简化实体类。常用注解如下:

@Data:自动生成getter、setter、toString、equals、hashCode、无参构造

@AllArgsConstructor:生成全参构造方法

@NoArgsConstructor:生成无参构造方法

@Builder:生成链式建造者模式(优雅赋值)

@Slf4j:直接用日志,不用创建 Logger 对象

@ToString:生成实体类 toString() 方法,不用自己手写,打印对象时会直接输出字段名和值

@EqualsAndHashCode:生成equals()hashCode()方法,用于对象相等判断、哈希存储

十二、Jackson序列化

@JsonProperty:指定序列化后字段名

@JsonIgnore:序列化忽略该字段,不返回前端

@JsonFormat:日期格式化

@JsonAlias:反序列化兼容多个别名

十三、Fastjson序列化

@JSONField:字段别名、格式化、顺序

@JSONField(serialize = false):序列化忽略字段

注:

  • 小对象、高吞吐、简单结构 :选 Fastjson2 ,序列化 / 反序列化比 Jackson 快 20%~50%
  • 复杂嵌套、大对象、高并发稳定性、低 GC :选 Jackson,内存更省、GC 压力小、更稳。
  • Spring Boot 项目、企业级开发 :优先 Jackson(默认集成、生态强、安全更稳)。
  • Fastjson1.x 不要用:漏洞多、已停维护。
相关推荐
金銀銅鐵4 小时前
[Java] 如何理解 class 文件中字段的 descriptor?
java·后端
我是一颗柠檬4 小时前
【MySQL全面教学】MySQL基础与环境搭建Day1(2026年)
数据库·后端·sql·mysql·database
我是一颗柠檬4 小时前
【MySQL全面教学】MySQL数据类型详解Day2(2026年)
数据库·后端·sql·mysql·database
怒放吧德德4 小时前
JDK 版本一键切换工具(windows)
后端·shell
爱上语文4 小时前
2026在线会议软件推荐:8款工具对比评测与多人协作选型指南
后端
小江的记录本5 小时前
【Java并发编程】锁机制:volatile:JMM内存模型、可见性/禁止指令重排、内存屏障、单例模式中的应用(附《思维导图》+《面试高频考点清单》)
java·后端·python·mysql·单例模式·面试·职场和发展
无风听海5 小时前
深入理解 ASP.NET Core 中的 UseRouting 与 UseEndpoints
后端·asp.net
fliter5 小时前
Rust 中的递归迭代器:一次让编译器教你理解 impl Trait 与生命周期的旅程
后端
考虑考虑5 小时前
JDK26支持Http3属性
java·后端·java ee