豆包 Spring 常用注解详解及分类
Spring常用注解大全
以下是 Spring 全家桶常用注解大全,按「核心功能模块」分类,覆盖 IOC/DI、MVC、事务、配置、AOP、数据访问等场景,兼顾基础注解与进阶用法,方便直接查阅:
一、核心 IOC 容器(Bean 注册与管理)
- 组件扫描与注册
@Component:通用组件注解,标记类为 Spring 托管 Bean(无明确分层时使用)。
@Controller:MVC 控制层注解,自动扫描注册,支持请求映射。
@Service:业务逻辑层注解,逻辑分层标识,便于后续 AOP 增强。
@Repository:数据访问层(DAO)注解,默认集成持久层异常转换(如 SQLException 转 Spring 数据异常)。
@Configuration:标记配置类,替代 XML 配置文件,内部可通过 @Bean 定义 Bean。
@Bean:配合 @Configuration,手动注册 Bean(如第三方组件、复杂初始化对象),支持指定初始化 / 销毁方法(initMethod=“init”、destroyMethod=“destroy”)。
@ComponentScan:指定组件扫描路径(如 @ComponentScan(“com.example”)),替代 XML 的 context:component-scan。 - Bean 作用域与生命周期
@Scope:指定 Bean 作用域,取值:
singleton:单例(默认,容器启动时初始化);
prototype:原型(每次获取时创建新实例);
request:请求域(每次 HTTP 请求创建新实例,Web 环境);
session:会话域(同一会话共享一个实例,Web 环境);
application:应用域(全局 Web 应用共享,Web 环境)。
@Lazy:延迟 Bean 初始化(单例 Bean 默认启动时初始化,加此注解则首次使用时初始化)。
@Primary:多个同类型 Bean 时,指定默认注入的 Bean(优先级最高)。
@DependsOn(“beanName”):指定 Bean 依赖的其他 Bean,确保依赖 Bean 先初始化。
@PostConstruct:Bean 初始化后执行的方法(JDK 原生注解,替代 initMethod)。
@PreDestroy:Bean 销毁前执行的方法(JDK 原生注解,替代 destroyMethod)。 - 条件注册
@Conditional:按自定义条件注册 Bean(如 @Conditional(WindowsCondition.class),仅 Windows 系统生效)。
衍生注解(Spring Boot 提供):
@ConditionalOnClass:类路径存在指定类时生效;
@ConditionalOnMissingClass:类路径不存在指定类时生效;
@ConditionalOnBean:容器中存在指定 Bean 时生效;
@ConditionalOnProperty:配置文件中存在指定属性时生效(如 @ConditionalOnProperty(name=“spring.datasource.enable”, havingValue=“true”))。
二、依赖注入(DI)
@Autowired:按类型自动注入依赖,默认必须存在(可通过 required=false 允许为空),支持 @Qualifier 配合按名称注入。
@Qualifier(“beanName”):配合 @Autowired,解决同类型 Bean 冲突,按 Bean 名称注入。
@Resource(name=“beanName”):JDK 原生注解,默认按名称注入,无名称时按类型匹配(不依赖 Spring 核心 API)。
@Value:注入配置属性或常量,支持:
直接注入常量:@Value(“hello”);
注入配置文件属性:@Value("${server.port}");
SpEL 表达式:@Value("#{T(java.lang.Math).random()}")。
@Inject:JSR-330 标准注解,功能与 @Autowired 类似,需导入 javax.inject 依赖(无 required 属性)。
三、Spring MVC(请求处理与响应) - 控制器与请求映射
@Controller:标记控制器类,配合视图解析器返回页面(需搭配 @RequestMapping)。
@RestController:@Controller + @ResponseBody 组合,直接返回 JSON/XML 数据(适用于 RESTful 接口)。
@RequestMapping:基础请求映射,支持配置 value(URL 路径)、method(请求方式)、params(请求参数)、headers(请求头),例:@RequestMapping(value="/user", method=RequestMethod.GET, params=“id”)。
简化请求映射注解(Spring 4.3+):
@GetMapping("/user"):等价于 @RequestMapping(method=RequestMethod.GET);
@PostMapping("/user"):等价于 @RequestMapping(method=RequestMethod.POST);
@PutMapping("/user/{id}"):PUT 请求(更新资源);
@DeleteMapping("/user/{id}"):DELETE 请求(删除资源);
@PatchMapping("/user/{id}"):PATCH 请求(部分更新资源)。 - 请求参数接收
@RequestParam:接收 URL 拼接参数(如 ?id=1),支持:
指定参数名:@RequestParam(“userId”);
默认值:@RequestParam(defaultValue=“0”);
非必填:@RequestParam(required=false);
数组参数:@RequestParam(“ids”) List ids。
@PathVariable(“id”):接收 URL 路径参数(如 /user/{id}),支持 RESTful 风格。
@RequestBody:接收 HTTP 请求体(JSON/XML 格式),自动反序列化为 Java 对象(需配置消息转换器,如 Jackson)。
@RequestHeader(“User-Agent”):接收请求头参数。
@CookieValue(“JSESSIONID”):接收 Cookie 中的参数。
@ModelAttribute:将请求参数绑定到实体类(表单提交场景),或在方法上定义全局模型数据。
@SessionAttribute:获取会话域(Session)中的属性值。
@RequestPart:接收多部分请求数据(如文件上传),例:@RequestPart(“file”) MultipartFile file。 - 响应处理
@ResponseBody:将方法返回值转为 JSON/XML 响应(无需视图解析)。
@ResponseStatus:指定响应状态码(如 @ResponseStatus(HttpStatus.CREATED) 对应 201)。
@ControllerAdvice:全局异常处理 / 数据绑定增强类,配合以下注解使用:
@ExceptionHandler(Exception.class):捕获指定异常并统一处理;
@InitBinder:全局数据绑定(如日期格式转换);
@ModelAttribute:全局模型数据(所有控制器可共享)。
@CrossOrigin:解决跨域请求,支持指定允许的域名、请求方式、Credentials 等,例:@CrossOrigin(origins=“http://localhost:8080”, maxAge=3600)。
四、事务管理
@Transactional:标注在类 / 方法上,开启声明式事务,核心属性:
propagation:事务传播行为(如 REQUIRED(默认)、REQUIRES_NEW、SUPPORTS);
isolation:事务隔离级别(如 READ_COMMITTED(默认)、SERIALIZABLE);
readOnly:是否只读事务(查询场景设为 true,优化性能);
rollbackFor:指定触发回滚的异常(如 rollbackFor=Exception.class,默认仅 RuntimeException 回滚);
noRollbackFor:指定不触发回滚的异常;
timeout:事务超时时间(单位秒,默认 -1 无限制)。
@EnableTransactionManagement:开启事务管理功能(Spring Boot 自动配置,无需手动添加)。
五、AOP 面向切面编程
@Aspect:标记类为切面类(需配合 @Component 注册到容器)。
@Pointcut:定义切入点表达式,例:@Pointcut(“execution(* com.example.service..(…))”)(匹配 service 层所有方法)。
通知注解(织入逻辑):
@Before(“pointcut()”):目标方法执行前执行;
@After(“pointcut()”):目标方法执行后执行(无论成功 / 异常);
@AfterReturning(value=“pointcut()”, returning=“result”):目标方法成功返回后执行(可获取返回值);
@AfterThrowing(value=“pointcut()”, throwing=“e”):目标方法抛出异常后执行(可获取异常信息);
@Around(“pointcut()”):环绕通知(包裹目标方法,可控制方法执行前后、是否执行)。
@EnableAspectJAutoProxy:开启 AspectJ 自动代理(Spring Boot 自动配置)。
六、数据访问(Spring Data JPA/MyBatis) - Spring Data JPA
@RepositoryRestResource:将 Repository 暴露为 RESTful 接口(无需手动写控制器)。
@Entity:标记实体类,映射数据库表(JPA 核心注解)。
@Table(name=“t_user”):指定实体类对应的数据库表名。
@Id:标记主键字段。
@GeneratedValue(strategy=GenerationType.IDENTITY):指定主键生成策略(如自增)。
@Column(name=“user_name”):指定字段映射的数据库列名(如字段名与列名不一致时使用)。
@Transient:标记字段不映射到数据库(临时字段)。
@OneToOne/@OneToMany/@ManyToOne/@ManyToMany:定义实体间关联关系。
@Query:自定义 JPQL/SQL 查询,例:@Query(“select u from User u where u.name = ?1”)。
@Modifying:配合 @Query,标记更新 / 删除操作(需开启事务)。 - MyBatis 整合
@Mapper:标记接口为 MyBatis Mapper 接口(无需 XML 扫描配置)。
@MapperScan(“com.example.mapper”):批量扫描 Mapper 接口(替代单个 @Mapper)。
@Param(“name”):Mapper 接口方法参数命名,例:User selectByName(@Param(“name”) String name)(对应 XML 中 #{name})。
@Insert/@Update/@Delete/@Select:MyBatis 注解式 SQL,例:@Select(“select * from t_user where id = #{id}”)。
七、配置相关(Spring Boot 增强)
@SpringBootApplication:Spring Boot 应用入口注解,等价于 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan。
@EnableAutoConfiguration:开启自动配置(Spring Boot 核心,根据依赖自动配置 Bean)。
@ConfigurationProperties(prefix=“user”):绑定配置文件属性到实体类(如 application.yml 中 user.name 绑定到 User 类的 name 字段)。
@EnableConfigurationProperties(UserProperties.class):启用指定的配置属性类。
@PropertySource(value=“classpath:custom.properties”, encoding=“UTF-8”):加载自定义配置文件(默认仅加载 application.yml/properties)。
@Profile(“dev”):指定 Bean 仅在特定环境生效(如 dev 开发环境、prod 生产环境)。
@EnableCaching:开启缓存功能(配合 @Cacheable 等缓存注解)。
缓存注解:
@Cacheable(value=“userCache”, key="#id"):查询结果缓存(key 为参数 id);
@CachePut(value=“userCache”, key="#user.id"):更新缓存(新增 / 修改后同步缓存);
@CacheEvict(value=“userCache”, key="#id"):删除缓存(删除数据后清空对应缓存);
@CacheConfig(cacheNames=“userCache”):类级缓存配置(统一指定缓存名称)。
八、其他常用进阶注解
@Async:标记方法为异步执行(需配合 @EnableAsync 开启异步功能)。
@Scheduled(cron=“0 0 3 * * ?”):定时任务注解(需配合 @EnableScheduling 开启定时功能),支持 cron 表达式、固定延迟、固定速率。
@Valid/@Validated:参数校验(JSR-380 标准),@Valid 用于嵌套校验,@Validated 支持分组校验,配合 @NotNull/@NotBlank/@Min 等校验注解使用。
@PathVariable/@RequestParam 进阶:@PathVariable(required=false) 支持可选路径参数(Spring 5.3+)。
@EnableWebMvc:全面接管 Spring MVC 配置(禁用自动配置,需手动配置视图解析器、消息转换器等)。
