当前位置: 首页 > news >正文

豆包 Spring 常用注解详解及分类

Spring常用注解大全
以下是 Spring 全家桶常用注解大全,按「核心功能模块」分类,覆盖 IOC/DI、MVC、事务、配置、AOP、数据访问等场景,兼顾基础注解与进阶用法,方便直接查阅:
一、核心 IOC 容器(Bean 注册与管理)

  1. 组件扫描与注册
    @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。
  2. 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)。
  3. 条件注册
    @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(请求处理与响应)
  4. 控制器与请求映射
    @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 请求(部分更新资源)。
  5. 请求参数接收
    @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。
  6. 响应处理
    @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)
  7. 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,标记更新 / 删除操作(需开启事务)。
  8. 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 配置(禁用自动配置,需手动配置视图解析器、消息转换器等)。
http://www.dtcms.com/a/585856.html

相关文章:

  • 企业网站建设收费最大的网站开发公司
  • 服务器运维(六)跨域配置 Preflight 问题——东方仙化神期
  • 第三次作业-第四章网站搭建
  • React 17
  • Linux:多路转接
  • 为什么国内禁用docker呢?
  • 石家庄行业网站深圳建筑工地招工招聘信息
  • 云溪网络建站宝盒wordpress发文章套模版
  • 人在虚弱的时候真的能看到鬼
  • zabbix原生高可用集群应用实战
  • flink1.20.2环境部署和实验-1
  • 网站主目录程序开发步骤不包括
  • 云手机技术是如何实现的?
  • 现有rest api转换为MCP工具 存量api改造为MCP Server
  • MyBatis:性能优化实战 - 从 SQL 优化到索引设计
  • 【Golang】常见数据结构原理剖析
  • 做百度推广得用网站是吗做小说网站做国外域名还是国内的好处
  • Ubuntu 复制王者:rsync -av 终极指南 —— 进度可视化 + 无损同步,效率甩 cp 几条街!
  • ubuntu磁盘管理、磁盘扩容
  • 专业设计网站排名百达翡丽手表网站
  • 广度优先搜索
  • 高端网站建设公司名称动物自己做的网站
  • 编译OpenCV
  • jQuery Mobile 事件详解
  • 网站换模板影响国家域名注册中心
  • 佛山的网站建设公司凡科建站微信小程序
  • 建设部网站网上大厅长沙景点免费
  • 不练不熟,不写就忘 之 compose 之 动画之 animateSizeAsState动画练习
  • 函数模板和类模板
  • 从 0 到 1:我的 C++ 游戏开发全记录