注解是贴在类、方法、变量上的标记标签 ,以@开头,本身不执行业务代码。
作用主要有以下几点:
-
代码标识说明
-
替代配置文件
-
自动生成代码
-
框架识别驱动
-
数据约束与校验
-
单元测试
-
序列化转换
日常工作中常用的注解主要有以下十三类:
- 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 不要用:漏洞多、已停维护。