Spring Framework 常用注解详解(按所属包分类整理)

在使用 Spring Framework 进行开发时,注解(Annotation)是实现 依赖注入(DI)组件扫描AOP 切面事务管理Web 请求映射 的核心手段。Spring 提供了丰富且结构清晰的注解体系,这些注解按照功能被组织在不同的包中。

本文 按注解所属的包(package)进行分类,详细说明每个包的用途,并列举该包下的常用注解及其功能。


1. org.springframework.stereotype —— 组件声明注解

🔹 用途说明:

该包提供了用于 声明 Spring 管理的组件(Bean) 的注解。Spring 容器通过组件扫描(@ComponentScan)自动发现这些类,并将其注册为 Bean 实例。这些注解主要用于类级别,实现分层架构的语义化标注。

✅ 常用注解:

注解

详细说明

@Component

通用组件注解,任何被 Spring 管理的类都可以使用。它是@Service@Repository@Controller的父注解。

@Service

专用于业务逻辑层(Service 层),语义更明确,便于代码维护和分层设计。

@Repository

专用于数据访问层(DAO/Repository),除了注册为 Bean 外,还能自动将数据库异常(如 SQLException)转换为 Spring 的DataAccessException,便于统一异常处理。

@Controller

用于 Web 层控制器,通常与@RequestMapping配合使用,处理 HTTP 请求。

@RestController

虽然实际位于org.springframework.web.bind.annotation包中,但功能上属于此分类。它是@Controller + @ResponseBody的组合注解,用于构建 RESTful API,返回 JSON/XML 数据,无需额外标注@ResponseBody

💡 提示:使用这些注解后,需配合 @ComponentScan 启用组件扫描,Spring 才能自动发现并注册这些 Bean。


2. org.springframework.beans.factory.annotation —— 依赖注入(DI)核心注解

🔹 用途说明:

该包提供了 Spring 依赖注入(DI)的核心注解,用于实现 自动装配(Autowiring)属性注入。它们可以作用于字段、方法、构造器等位置,是实现松耦合设计的关键。

✅ 常用注解:

注解

详细说明

@Autowired

自动装配 Bean,默认按类型(byType)查找并注入。可作用于字段、setter 方法、构造器等。若存在多个同类型 Bean,需配合@Qualifier使用。

@Qualifier

@Autowired配合使用,通过指定 Bean 的名称(id)来解决类型冲突问题。例如:@Qualifier("userServiceImpl")

@Value

用于注入基本类型或字符串值,支持从配置文件(如application.properties)读取属性值,语法为${key};也支持 SpEL(Spring Expression Language)表达式,语法为#{expression}。例如:
@Value("${server.port}")
@Value("#{systemProperties['os.name']}")

💡 提示:@Value 是实现外部化配置(Externalized Configuration)的重要手段,常用于读取环境变量、配置项等。


3. org.springframework.context.annotation —— 配置与条件化注解

🔹 用途说明:

该包提供了基于 Java 的配置方式(Java Config),用于替代传统的 XML 配置文件。它支持 配置类定义组件扫描条件化加载环境隔离 等高级功能,是构建现代化 Spring 应用的基础。

✅ 常用注解:

注解

详细说明

@Configuration

标记一个类为配置类,相当于一个 XML 配置文件。此类中通常包含@Bean方法。

@Bean

标注在方法上,表示该方法返回的对象将被注册为 Spring 容器中的 Bean。常用于配置第三方组件(如 DataSource、RedisTemplate 等)。

@ComponentScan

启用组件自动扫描,指定扫描的包路径。Spring 会自动发现并注册带有@Component及其衍生注解的类。

@PropertySource

用于加载.properties属性文件,通常与@Configuration一起使用。例如:
@PropertySource("classpath:app.properties")
配合@Value注入属性值。

@Import

导入其他配置类,实现配置的模块化管理。例如:
@Import(DatabaseConfig.class)

@Profile

指定某个 Bean 或配置类仅在特定环境下生效(如devtestprod)。例如:
@Profile("dev")
结合spring.profiles.active属性控制环境切换。

@Scope

定义 Bean 的作用域,常见值有:
-singleton(默认,单例)
-prototype(每次获取都创建新实例)
-requestsession(Web 环境下)

@Lazy

标记 Bean 为延迟初始化,仅在首次使用时创建,可提升应用启动速度。

@Primary

当容器中存在多个相同类型的 Bean 时,标记该 Bean 为“首选”,避免@Autowired报错。

💡 提示:这些注解是实现“零 XML 配置”的关键,尤其在 Spring Boot 中被广泛使用。


4. org.springframework.web.bind.annotation —— Web 与 MVC 注解

🔹 用途说明:

该包是 Spring MVC 的核心注解集合,用于处理 HTTP 请求映射参数绑定响应处理 等 Web 层功能。适用于构建传统的 MVC 应用或 RESTful 风格的 Web 服务。

✅ 常用注解:

注解

详细说明

@RequestMapping

最基础的请求映射注解,可作用于类或方法,支持设置 URL 路径、请求方法(GET/POST)、参数、请求头等。

@GetMapping

快捷方式,等价于@RequestMapping(method = RequestMethod.GET),用于映射 GET 请求。

@PostMapping

映射 POST 请求,常用于表单提交或创建资源。

@PutMapping

映射 PUT 请求,用于更新资源。

@DeleteMapping

映射 DELETE 请求,用于删除资源。

@PatchMapping

映射 PATCH 请求,用于部分更新资源。

@RequestParam

绑定请求参数(如?name=张三)到方法参数。支持设置是否必填(required)、默认值(defaultValue)。

@PathVariable

绑定 URL 路径中的变量(如/users/{id}),常用于 RESTful 风格接口。

@RequestBody

将 HTTP 请求体(如 JSON)反序列化为 Java 对象,常用于 POST/PUT 请求体数据绑定。

@ResponseBody

将方法返回值直接写入 HTTP 响应体(如返回 JSON),常用于 AJAX 或 REST 接口。

@RestController

组合注解,等价于@Controller + @ResponseBody,所有方法默认返回数据而非视图名。

@RequestHeader

获取 HTTP 请求头信息,如User-AgentAuthorization等。

@CookieValue

获取 Cookie 的值。

@ModelAttribute

用于绑定表单数据到对象,或在请求处理前向模型中添加属性。

💡 提示:@RestController 是构建前后端分离项目的核心注解,推荐用于 REST API 开发。


5. org.springframework.transaction.annotation —— 事务管理注解

🔹 用途说明:

该包提供了声明式事务管理的支持,通过注解方式控制数据库事务的边界,避免手动管理 Connectioncommitrollback,提升代码可读性和一致性。

✅ 常用注解:

注解

详细说明

@Transactional

标记方法或类需要事务管理。支持配置:
- 传播行为(Propagation)
- 隔离级别(Isolation)
- 超时时间(timeout)
- 是否只读(readOnly)
- 回滚规则(rollbackFor)

例如:
@Transactional(rollbackFor = Exception.class)

⚠️ 注意:需在配置类上添加 @EnableTransactionManagement 启用事务支持(Spring Boot 自动配置)。


6. org.aspectj.lang.annotation —— AOP 切面编程注解

🔹 用途说明:

该包来自 AspectJ 框架,Spring 借助它实现 面向切面编程(AOP),用于处理日志、权限、性能监控、事务等横切关注点(Cross-cutting Concerns)。

✅ 常用注解:

注解

详细说明

@Aspect

定义一个切面类,该类中包含通知(Advice)方法。

@Before

前置通知,在目标方法执行前执行。

@After

最终通知,无论目标方法是否抛出异常,都会执行。

@AfterReturning

返回通知,在目标方法成功执行并返回后执行。

@AfterThrowing

异常通知,在目标方法抛出异常后执行。

@Around

环绕通知,最强大的通知类型,可以控制目标方法的执行(如前置逻辑 → 执行方法 → 后置逻辑)。

@Pointcut

定义切点表达式,用于复用切点逻辑。例如:
@Pointcut("execution(* com.example.service.*.*(..))")

⚠️ 注意:使用这些注解需引入 aspectjweaver 依赖,并启用 AOP 支持(如 @EnableAspectJAutoProxy)。


7. 测试相关注解(Spring Boot Test 模块)

虽然严格来说不属于纯 Spring Framework,但在实际开发中极为常用,特此补充。

🔹 所属包:

  • org.springframework.boot.test.context
  • org.springframework.boot.test.autoconfigure.web.servlet
  • org.springframework.boot.test.mock.mockito

✅ 常用注解:

注解

详细说明

@SpringBootTest

启动完整的 Spring 上下文,用于集成测试。

@WebMvcTest

仅加载 Web 层(Controller),用于测试控制器逻辑。

@DataJpaTest

仅加载 JPA 相关配置,常用于 Repository 层测试,自动配置内存数据库。

@MockBean

在测试中创建一个 Mock Bean(如 Mockito 对象),并注册到 Spring 容器中,用于模拟依赖。

💡 提示:这些注解属于 spring-boot-test 模块,适用于 Spring Boot 项目。


✅ 总结:Spring 注解体系概览

包名

主要功能

典型使用场景

org.springframework.stereotype

组件声明

分层架构 Bean 标注

org.springframework.beans.factory.annotation

依赖注入

自动装配、属性注入

org.springframework.context.annotation

配置管理

Java Config、条件化加载

org.springframework.web.bind.annotation

Web 请求处理

MVC、REST API 开发

org.springframework.transaction.annotation

事务管理

数据库操作一致性控制

org.aspectj.lang.annotation

AOP 切面

日志、权限、性能监控

spring-boot-test相关包

测试支持

单元测试、集成测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96186.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROADS落地的架构蓝图

2 ROADS落地的架构蓝图 将ROADS体验从理念转化为现实,需要一套完整且自顶向下的架构蓝图作为支撑。华为的实践表明,数字化转型的成功依赖于多个架构层次的协同推进,而非单点技术的应用。该蓝图通常包含以下五个关键层次,每一层都承…

如何构建一个神经网络?从零开始搭建你的第一个深度学习模型

在深度学习的海洋中,神经网络就像一艘船,承载着数据的流动与特征的提取。而构建一个神经网络,就像是在设计这艘船的结构。本文将带你一步步了解如何使用 PyTorch 构建一个完整的神经网络模型,涵盖网络层的组织、前向传播与反向传播…

自学嵌入式第二十三天:数据结构(3)-双链表

一、strtokchar * strtok(char *s1,char *s2);截断字符串,在s1字符串中找到s2截取前一段返回,如需要再次截取剩余段,再使用此函数s1输入NULL即可;二、bzerobzero(char *p,size_t size);清零,从p地址开始,清零size个bit…

河南萌新联赛2025第六场 - 郑州大学

暑期集训已经接近尾声,一年六场的暑期萌新联赛也已经结束了,进步是比较明显的,从一开始的七八百名到三四百名,虽然拿不出手,但是这也算对两个月的集训的算法初学者的我一个交代。 比赛传送门:河南萌新联赛…

2-1.Python 编码基础 - 基础运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符)

一、算术运算符 1、基本介绍编号运算符说明示例输出结果1两数相加10 20302-两数相减10 - 20-103*两数相乘,或者返回一个被重复若干次的字符串10 * 202004/两数相除10 / 200.55//两数相除并返回商的整数部分9 // 246%两数相除并返回余数10 % 507**幂运算10 ** 21002…

CMOS知识点 MOS管不同工作区域电容特性

知识点14:MOSFET的电容主要来源于其物理结构:栅氧层电容:栅极(G)与衬底(B)、沟道、源(S)、漏(D)之间隔着二氧化硅绝缘层,自然形成电容…

预测性维护+智能优化:RK3568+FPGA方案在储能行业的应用

在储能行业,RK3568FPGA方案通过预测性维护和智能优化技术,显著提升系统可靠性和经济性。该方案采用异构架构(FPGA处理高速信号采集,RK3568负责策略计算与通信管理),实现微秒级响应和精准控制。‌26一、预测…

工业4.0时代,耐达讯自动化Profibus转光纤如何重构HMI通信新标准?“

在智能制造与工业4.0浪潮下,HMI(人机界面)作为设备与操作员之间的“桥梁”,承担着实时数据显示、设备监控及交互控制的核心职能。然而,传统Profibus总线在HMI连接中常因电磁干扰、传输距离限制等问题,导致画…

SpringClound——网关、服务保护和分布式事务

一、网关网络的关口,负责请求的路由、转发、身份验证server:port: 8080 spring:cloud:nacos:discovery:server-addr: 192.168.96.129:8848gateway:routes:- id: item-serviceuri: lb://item-servicepredicates:- Path/items/**,/search/**- id: user-serviceuri: lb…

【C++】模版(初阶)

目录 一. 函数模版 1. 格式 原理 2. 函数模版的实例化 二. 类模板 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char&…

InfluxDB 开发工具链:IDE 插件与调试技巧(二)

四、利用 IDE 插件提升开发效率 4.1 代码编写技巧 在使用安装了 InfluxDB 插件的 IDE 进行代码编写时,我们可以充分利用插件提供的代码导航和智能提示功能,来显著提高编写 InfluxDB 相关代码的效率和准确性。 以一个涉及多个 Measurement 和复杂查询条…

定制开发开源AI智能名片S2B2C商城小程序:场景体验新维度与四重目标达成

摘要:本文聚焦于定制开发开源AI智能名片S2B2C商城小程序,探讨其在场景体验领域的应用与价值。通过深入分析场景体验的最高境界——深体验、强认知、高传播、关系深化这四个目标,阐述该小程序如何凭借自身特性与功能,在商业场景中实…

开源 GIS 服务器搭建:GeoServer 在 Linux 系统上的部署教程

GeoServer 是一个开源的地理信息服务服务器,可以发布地图、矢量数据和栅格数据。 1. 更新系统 sudo apt update && sudo apt upgrade -y2. 安装 Java 11 GeoServer 需要 Java 运行环境,这里用 OpenJDK 11。 sudo apt install openjdk-11-jdk…

前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案

前端面试题详解与更多面试题 WebGLCesiumThree 1. 自我介绍 回答要点: 教育背景和工作经验技术栈和专长领域参与过的重点项目个人优势和学习能力职业规划 示例: “我是一名有前端开发经验的工程师,熟练掌握React、Vue等主流框架&#x…

集成电路学习:什么是Object Tracking目标跟踪

Object Tracking:目标跟踪 Object Tracking,即目标跟踪,是计算机视觉领域的一个重要研究方向,它专注于在视频帧序列中连续地监测和定位一个或多个目标对象的位置。以下是对目标跟踪技术的详细解析: 一、定义与目的 定义: 目标跟踪是指在视频序列中,通过特定的算法…

深入理解计算机系统

参考书籍 8-18 处理器体系结构不同于冯诺依曼与哈佛体系 压栈与退栈与理解c等高级语言的工作原理息息相关,也是常用的攻击手段 Buffer Overflow的主要技术基础 day2 继续读前言之类的 本书前言 这本书,讲述应用程序员如何能够利用系统知识来编写更好…

LLM 中 token 简介与 bert 实操解读

一、什么是 LLM? LLM,全称为 Large Language Model(大语言模型),是一种基于神经网络(主要是 Transformer 结构)的大规模自然语言处理(NLP)模型。其核心能力在于理解、生成…

【运维心得】三步更换HP笔记本电脑外壳

目录 准备工作 第一步:拆卸电池与后盖 第二步:处理隐藏螺丝 第三步:断开内部排线 总结一下 今天又碰到了两台HP的笔记本,一台外壳完好,但是无法开机,判断是主板问题。另外一台外壳有损坏,但…

深入 Linux 网络(一) -- 网卡队列

文章目录网卡网卡的核心功能网卡的关键技术单队列网卡多队列网卡查看网卡信息ifconfigethtool查看网卡队列Linux 查看中断绑定网卡中断查询查看中断绑定的 cpu总结1. 默认情况(单队列网卡)2. 多队列网卡3. 如何查看和配置绑定关系?4. 性能优化…

HTTP 1.0, 2.0 和 3.0 有什么区别?

HTTP/1.0 就像是“一问一答”的电话,每次打电话(请求)都得先拨号(建立连接),说完一句话(发送数据)就挂断(关闭连接),再打下一通电话。效率比较低。…