常见 Java 注解系统性知识体系总结
一、核心注解分类详解
1. Spring核心组件注解
@Component
- 所属框架:Spring Framework
- 作用域:类
- 核心功能:标注通用组件,自动注册为Spring Bean
- 常用属性:
value(指定Bean名称,默认类名首字母小写) - 使用场景:不确定层级的通用工具类、基础组件
@Controller
- 所属框架:Spring Framework
- 元注解:
@Component - 作用域:类
- 核心功能:标注Web层控制器,处理HTTP请求并返回视图
- 使用场景:传统Spring MVC开发,返回JSP/Thymeleaf等视图
@Service
- 所属框架:Spring Framework
- 元注解:
@Component - 作用域:类
- 核心功能:标注业务逻辑层(Service层)组件
- 使用场景:业务逻辑处理类,如用户服务、订单服务
@Repository
- 所属框架:Spring Framework
- 元注解:
@Component - 作用域:类
- 核心功能:标注数据访问层(DAO层)组件,转换数据库异常为Spring统一异常体系
- 使用场景:数据库操作类,如MyBatis Mapper、JPA Repository
2. 依赖注入注解
@Autowired
- 所属框架:Spring Framework
- 作用域:构造器、方法、字段、参数
- 核心功能:按类型(byType)自动装配Bean,默认要求依赖必须存在
- 常用属性:
required(是否必须注入,默认true) - 使用场景:自动注入依赖Bean
@Qualifier
- 所属框架:Spring Framework
- 作用域:字段、方法、参数、类
- 核心功能:配合
@Autowired,按名称(byName)指定要注入的Bean - 常用属性:
value(指定Bean名称) - 使用场景:解决同类型多Bean冲突
@Resource
- 所属框架:JSR-250(Java标准)
- 作用域:字段、方法
- 核心功能:默认按名称(byName)装配,找不到名称再按类型(byType)
- 常用属性:
name(Bean名称)、type(Bean类型) - 使用场景:Java标准依赖注入,替代
@Autowired+@Qualifier
@Primary
- 所属框架:Spring Framework
- 作用域:类、方法
- 核心功能:当存在多个同类型Bean时,标注
@Primary的Bean为默认优先注入的Bean - 使用场景:设置默认Bean,避免注入冲突
3. Web层注解
@RestController
- 所属框架:Spring Framework
- 元注解:
@Controller + @ResponseBody - 作用域:类
- 核心功能:标注RESTful控制器,所有方法默认返回JSON/XML数据
- 使用场景:前后端分离的REST API开发
@ResponseBody
- 所属框架:Spring Framework
- 作用域:方法、类
- 核心功能:将方法返回值直接写入HTTP响应体(而非解析为视图)
- 使用场景:在
@Controller类中单独标注方法返回数据
@RequestBody
- 所属框架:Spring Framework
- 作用域:方法参数
- 核心功能:将HTTP请求体(JSON/XML)绑定到方法参数
- 常用属性:
required(是否必须有请求体,默认true) - 使用场景:接收POST/PUT请求的JSON数据
@RequestParam
- 所属框架:Spring Framework
- 作用域:方法参数
- 核心功能:绑定HTTP请求参数(查询参数或表单参数)到方法参数
- 常用属性:
name/value(参数名)、required(是否必须)、defaultValue(默认值) - 使用场景:获取URL查询参数(如
?page=1)、表单提交参数
@PathVariable
- 所属框架:Spring Framework
- 作用域:方法参数
- 核心功能:绑定URL路径变量(如
/users/{id}中的id)到方法参数 - 常用属性:
name/value(路径变量名)、required(是否必须) - 使用场景:RESTful URL中的动态参数
@RequestMapping
- 所属框架:Spring Framework
- 作用域:类、方法
- 核心功能:灵活映射HTTP请求到处理方法,可指定URL、HTTP方法、请求头等
- 常用属性:
value/path(URL路径)、method(HTTP方法)、consumes(请求Content-Type)、produces(响应Content-Type) - 使用场景:定义请求映射(类上定义基础路径,方法上定义具体路径)
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
- 所属框架:Spring Framework
- 元注解:
@RequestMapping(method = 对应HTTP方法) - 作用域:方法
- 核心功能:简化
@RequestMapping,专门处理对应HTTP方法的请求 - 使用场景:RESTful资源操作(GET查询、POST创建、PUT更新、DELETE删除)
@RestControllerAdvice
- 所属框架:Spring Framework
- 元注解:
@ControllerAdvice + @ResponseBody - 作用域:类
- 核心功能:全局异常处理、全局数据绑定,专门用于RESTful服务
- 常用属性:
basePackages(扫描包路径)、annotations(指定注解) - 使用场景:统一处理REST API的异常,返回JSON格式错误信息
@ExceptionHandler
- 所属框架:Spring Framework
- 作用域:方法
- 核心功能:标注异常处理方法,处理指定类型的异常
- 常用属性:
value(要处理的异常类型数组) - 使用场景:在
@RestControllerAdvice类中定义异常处理逻辑
4. 配置与启动注解
@Configuration
- 所属框架:Spring Framework
- 元注解:
@Component - 作用域:类
- 核心功能:标注配置类,替代XML配置,类中通过
@Bean方法定义Bean - 使用场景:Java配置类,定义Bean、配置第三方组件
@ComponentScan
- 所属框架:Spring Framework
- 作用域:类(通常配合
@Configuration) - 核心功能:指定扫描包路径,自动注册
@Component等注解的类为Bean - 常用属性:
basePackages(扫描包路径)、includeFilters(包含过滤器)、excludeFilters(排除过滤器) - 使用场景:自定义扫描包路径
@SpringBootApplication
- 所属框架:Spring Boot
- 元注解:
@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan - 作用域:类(启动类)
- 核心功能:Spring Boot启动类核心注解,组合配置、自动配置、组件扫描三大功能
- 常用属性:
scanBasePackages(扫描包路径)、exclude(排除自动配置类) - 使用场景:标注Spring Boot应用入口类
@SpringBootConfiguration
- 所属框架:Spring Boot
- 元注解:
@Configuration - 作用域:类
- 核心功能:标注Spring Boot配置类,语义上更明确
- 使用场景:Spring Boot配置类(通常被
@SpringBootApplication间接使用)
@EnableAutoConfiguration
- 所属框架:Spring Boot
- 作用域:类
- 核心功能:启用Spring Boot自动配置,根据依赖自动配置Bean
- 常用属性:
exclude(排除自动配置类)、excludeName(排除自动配置类名) - 使用场景:自定义自动配置(通常被
@SpringBootApplication间接使用)
@Import
- 所属框架:Spring Framework
- 作用域:类
- 核心功能:导入其他配置类、Bean类或
ImportSelector实现类 - 常用属性:
value(要导入的类数组) - 使用场景:模块化配置,组合多个配置类
@Conditional
- 所属框架:Spring Framework
- 作用域:类、方法
- 核心功能:按条件装配Bean,满足指定
Condition才注册 - 常用属性:
value(Condition实现类数组) - 使用场景:动态装配(如根据环境变量决定是否注册Bean)
5. 测试注解
@SpringBootTest
- 所属框架:Spring Boot Test
- 作用域:类
- 核心功能:标注Spring Boot集成测试类,启动完整应用上下文
- 常用属性:
classes(指定启动类)、webEnvironment(Web环境模式) - 使用场景:Spring Boot集成测试(测试Service、Controller等)
6. MyBatis/MyBatis-Plus注解
@Mapper
- 所属框架:MyBatis
- 作用域:接口
- 核心功能:标注Mapper接口,自动生成代理实现类并注册为Bean
- 使用场景:MyBatis Mapper接口定义
@Select/@Insert/@Update/@Delete
- 所属框架:MyBatis
- 作用域:方法
- 核心功能:标注CRUD方法,直接定义SQL语句(替代XML)
- 常用属性:
value(SQL语句) - 使用场景:简单CRUD操作,无需复杂XML配置
@TableName
- 所属框架:MyBatis-Plus
- 作用域:类
- 核心功能:标注实体类,指定对应的数据库表名
- 常用属性:
value(表名) - 使用场景:实体类名与表名不一致时指定表名
@TableId
- 所属框架:MyBatis-Plus
- 作用域:字段
- 核心功能:标注主键字段,指定主键生成策略
- 常用属性:
value(字段名)、type(主键策略,如IdType.AUTO自增) - 使用场景:实体类主键映射
@TableField
- 所属框架:MyBatis-Plus
- 作用域:字段
- 核心功能:标注非主键字段,指定字段映射、是否插入/更新、填充策略等
- 常用属性:
value(字段名)、exist(是否为表字段)、fill(填充策略) - 使用场景:字段名与列名不一致、排除非表字段、自动填充(如创建时间)
7. 事务与AOP注解
@Transactional
- 所属框架:Spring Framework
- 作用域:类、方法
- 核心功能:开启声明式事务管理,保证方法内操作要么全部成功要么全部回滚
- 常用属性:
propagation(传播行为)、isolation(隔离级别)、rollbackFor(回滚异常类型) - 使用场景:业务方法需要事务保证数据一致性(如转账、订单创建)
@Aspect
- 所属框架:Spring AOP
- 作用域:类
- 核心功能:标注切面类,定义横切关注点(如日志、事务)
- 使用场景:AOP切面定义
@Pointcut
- 所属框架:Spring AOP
- 作用域:方法
- 核心功能:定义切入点(要拦截的方法集合)
- 常用属性:
value(切入点表达式,如execution(* com.example.service.*.*(..))) - 使用场景:复用切入点表达式
@Before/@Around/@After/@AfterReturning/@AfterThrowing
- 所属框架:Spring AOP
- 作用域:方法
- 核心功能:定义通知类型(前置、环绕、后置、返回、异常)
- 常用属性:
value(切入点)、returning(返回值参数名)、throwing(异常参数名) - 使用场景:方法执行前后的逻辑(如日志、性能监控、异常处理)
8. 其他注解
@Value
- 所属框架:Spring Framework
- 作用域:字段、方法、构造参数
- 核心功能:注入单个配置属性或SpEL表达式结果
- 常用属性:
value(属性表达式,如${app.name}) - 使用场景:单个属性注入
@ConfigurationProperties
- 所属框架:Spring Boot
- 作用域:类
- 核心功能:批量注入配置属性,绑定到类字段(类型安全)
- 常用属性:
prefix(配置前缀)、ignoreUnknownFields(忽略未知字段) - 使用场景:批量配置注入(如连接池配置、自定义应用配置)
@WebFilter
- 所属框架:Servlet API
- 作用域:类
- 核心功能:标注Servlet过滤器,定义URL匹配规则
- 常用属性:
urlPatterns(过滤URL)、filterName(过滤器名称) - 使用场景:Web请求过滤(如字符编码、权限验证)
@ServletComponentScan
- 所属框架:Spring Boot
- 作用域:类
- 核心功能:扫描
@WebFilter、@WebServlet等Servlet注解 - 常用属性:
basePackages(扫描包路径) - 使用场景:Spring Boot中使用Servlet原生注解
二、全方位对比表
| 注解名称 | 所属框架 | 核心功能 | 作用域 | 关键属性 | 典型应用场景 |
|---|---|---|---|---|---|
| @Component | Spring Framework | 标注通用组件,自动注册为Bean | 类 | value(Bean名称) | 不确定层级的通用组件 |
| @Controller | Spring Framework | 标注Web层控制器,处理HTTP请求返回视图 | 类 | value(Bean名称) | 传统Spring MVC控制器 |
| @Service | Spring Framework | 标注业务逻辑层组件 | 类 | value(Bean名称) | Service层业务处理类 |
| @Repository | Spring Framework | 标注数据访问层组件,转换数据库异常 | 类 | value(Bean名称) | DAO层数据库操作类 |
| @Autowired | Spring Framework | 按类型自动装配Bean | 构造器/方法/字段/参数 | required(是否必须) | 依赖注入,配合@Qualifier |
| @Qualifier | Spring Framework | 配合@Autowired按名称指定Bean | 字段/方法/参数/类 | value(Bean名称) | 解决同类型多Bean冲突 |
| @Resource | JSR-250 | 默认按名称装配,找不到按类型 | 字段/方法 | name(Bean名称)、type(Bean类型) | Java标准依赖注入 |
| @Primary | Spring Framework | 指定同类型Bean的默认优先注入 | 类/方法 | 无 | 设置默认Bean |
| @RestController | Spring Framework | 标注RESTful控制器,所有方法返回JSON/XML | 类 | value(Bean名称) | 前后端分离REST API开发 |
| @ResponseBody | Spring Framework | 将返回值写入HTTP响应体 | 方法/类 | 无 | @Controller中返回数据 |
| @RequestBody | Spring Framework | 将HTTP请求体绑定到方法参数 | 方法参数 | required(是否必须) | 接收POST/PUT的JSON数据 |
| @RequestParam | Spring Framework | 绑定请求参数到方法参数 | 方法参数 | name/value、required、defaultValue | 获取查询参数、表单参数 |
| @PathVariable | Spring Framework | 绑定URL路径变量到方法参数 | 方法参数 | name/value、required | RESTful URL动态参数 |
| @RequestMapping | Spring Framework | 灵活映射HTTP请求到处理方法 | 类/方法 | value/path、method、consumes、produces | 定义请求映射 |
| @GetMapping | Spring Framework | 专门处理HTTP GET请求 | 方法 | 同@RequestMapping | 查询资源 |
| @PostMapping | Spring Framework | 专门处理HTTP POST请求 | 方法 | 同@RequestMapping | 创建资源 |
| @PutMapping | Spring Framework | 专门处理HTTP PUT请求 | 方法 | 同@RequestMapping | 更新资源 |
| @DeleteMapping | Spring Framework | 专门处理HTTP DELETE请求 | 方法 | 同@RequestMapping | 删除资源 |
| @RestControllerAdvice | Spring Framework | 全局异常处理、数据绑定,专门用于REST | 类 | basePackages、annotations | 统一处理REST API异常 |
| @ExceptionHandler | Spring Framework | 标注异常处理方法 | 方法 | value(异常类型) | 定义异常处理逻辑 |
| @Configuration | Spring Framework | 标注配置类,替代XML配置 | 类 | value(Bean名称) | Java配置类,定义Bean |
| @ComponentScan | Spring Framework | 指定扫描包路径,自动注册组件 | 类 | basePackages、includeFilters、excludeFilters | 自定义扫描包 |
| @SpringBootApplication | Spring Boot | 启动类核心注解,组合配置、自动配置、组件扫描 | 类 | scanBasePackages、exclude | Spring Boot入口类 |
| @SpringBootConfiguration | Spring Boot | 标注Spring Boot配置类 | 类 | 无 | Spring Boot配置类 |
| @EnableAutoConfiguration | Spring Boot | 启用自动配置,根据依赖自动配置Bean | 类 | exclude、excludeName | 启用Spring Boot自动配置 |
| @Import | Spring Framework | 导入配置类、Bean类等 | 类 | value(导入的类数组) | 模块化配置 |
| @Conditional | Spring Framework | 按条件装配Bean | 类/方法 | value(Condition实现类) | 动态装配Bean |
| @SpringBootTest | Spring Boot Test | 标注Spring Boot集成测试类,启动应用上下文 | 类 | classes、webEnvironment | Spring Boot集成测试 |
| @Mapper | MyBatis | 标注Mapper接口,生成代理实现类 | 接口 | 无 | MyBatis Mapper接口定义 |
| @Select | MyBatis | 标注查询方法,定义SQL | 方法 | value(SQL语句) | 简单查询 |
| @Insert | MyBatis | 标注插入方法,定义SQL | 方法 | value(SQL语句) | 简单插入 |
| @Update | MyBatis | 标注更新方法,定义SQL | 方法 | value(SQL语句) | 简单更新 |
| @Delete | MyBatis | 标注删除方法,定义SQL | 方法 | value(SQL语句) | 简单删除 |
| @TableName | MyBatis-Plus | 标注实体类,指定数据库表名 | 类 | value(表名) | 实体类与表名映射 |
| @TableId | MyBatis-Plus | 标注主键字段,指定主键策略 | 字段 | value(字段名)、type(主键策略) | 实体类主键映射 |
| @TableField | MyBatis-Plus | 标注非主键字段,指定字段映射、填充策略等 | 字段 | value(字段名)、exist、fill | 实体类字段映射、自动填充 |
| @Transactional | Spring Framework | 开启声明式事务管理 | 类/方法 | propagation、isolation、timeout、readOnly、rollbackFor | 业务方法事务保证 |
| @Aspect | Spring AOP | 标注切面类 | 类 | 无 | AOP切面定义 |
| @Pointcut | Spring AOP | 定义切入点 | 方法 | value(切入点表达式) | 复用切入点表达式 |
| @Before | Spring AOP | 前置通知,目标方法执行前执行 | 方法 | value(切入点) | 方法前逻辑(日志、权限) |
| @Around | Spring AOP | 环绕通知,目标方法执行前后执行,可控制执行 | 方法 | value(切入点) | 性能监控、事务控制 |
| @After | Spring AOP | 后置通知,目标方法执行后(无论异常)执行 | 方法 | value(切入点) | 资源释放 |
| @AfterReturning | Spring AOP | 返回通知,目标方法正常返回后执行 | 方法 | value(切入点)、returning(返回值参数名) | 获取返回值 |
| @AfterThrowing | Spring AOP | 异常通知,目标方法抛出异常后执行 | 方法 | value(切入点)、throwing(异常参数名) | 异常监控 |
| @Value | Spring Framework | 注入单个配置属性或SpEL表达式结果 | 字段/方法/构造参数 | value(属性表达式) | 单个属性注入 |
| @ConfigurationProperties | Spring Boot | 批量注入配置属性,绑定到类字段 | 类 | prefix、ignoreUnknownFields | 批量配置注入,类型安全 |
| @WebFilter | Servlet API | 标注Servlet过滤器 | 类 | urlPatterns、filterName | Web请求过滤(编码、权限) |
| @ServletComponentScan | Spring Boot | 扫描Servlet注解(@WebFilter等) | 类 | basePackages | Spring Boot中使用Servlet原生注解 |
三、思维导图
