spring 核心注解整理
总结一下,核心注解涵盖以下方面:
- 依赖注入相关注解
- Bean定义和组件扫描注解
- 配置类相关注解
- 条件化配置注解
- 作用域和生命周期注解
- AOP相关注解
- 事务管理注解
- 属性注入相关注解
- 测试相关注解
- Spring Boot核心注解(如果需要)
每个部分列出注解名称,简要说明作用,并给出代码示例。这样用户能够全面了解Spring的核心注解,并在实际开发中正确应用。
以下是 Spring 框架中 核心注解 的分类整理,涵盖依赖注入、配置管理、Bean 声明等核心功能:
一、依赖注入(Dependency Injection)
| 注解 | 作用 | 示例 |
|---|---|---|
@Autowired | 自动注入 Bean,默认按类型匹配。可标注在字段、构造函数或方法上。 | @Autowired private UserService userService; |
@Qualifier | 按名称指定注入的 Bean,用于解决多个同类型 Bean 的冲突。 | @Autowired @Qualifier("userServiceImplA") UserService userService; |
@Resource | JSR-250 标准注解,按名称注入(类似 @Autowired + @Qualifier)。 | @Resource(name = "userDao") private UserDao userDao; |
@Value | 注入配置文件属性或 SpEL 表达式结果。 | @Value("${app.name}") private String appName; |
二、Bean 声明与组件扫描
| 注解 | 作用 | 示例 |
|---|---|---|
@Component | 通用注解,标记类为 Spring Bean(需被组件扫描)。 | @Component public class UserService { ... } |
@Service | 标注服务层组件(功能同 @Component,语义更明确)。 | @Service public class UserServiceImpl implements UserService {} |
@Repository | 标注数据访问层组件(DAO 层),自动处理数据库异常。 | @Repository public class UserDaoImpl implements UserDao {} |
@Controller | 标注控制器层组件(Spring MVC)。 | @Controller public class UserController { ... } |
@Configuration | 标记类为配置类,定义 Bean。 | @Configuration public class AppConfig { ... } |
@Bean | 在配置类中定义 Bean,方法名默认作为 Bean 名称。 | @Bean public DataSource dataSource() { return new HikariDataSource(); } |
三、配置与条件化
| 注解 | 作用 | 示例 |
|---|---|---|
@Conditional | 根据条件决定是否注册 Bean(需实现 Condition 接口)。 | @Conditional(OnProductionEnvCondition.class) |
@Profile | 根据环境配置激活 Bean(如 dev, prod)。 | @Profile("dev") public class DevConfig { ... } |
@ConditionalOnClass | Spring Boot 条件注解,类路径存在指定类时生效。 | @ConditionalOnClass(RedisTemplate.class) |
@ConditionalOnMissingBean | 容器中不存在指定 Bean 时生效。 | @Bean @ConditionalOnMissingBean public CacheManager cacheManager() { ... } |
四、作用域与生命周期
| 注解 | 作用 | 示例 |
|---|---|---|
@Scope | 定义 Bean 的作用域(如 singleton, prototype)。 | @Scope("prototype") public class TaskProcessor { ... } |
@PostConstruct | JSR-250 注解,Bean 初始化后执行的方法。 | @PostConstruct public void init() { ... } |
@PreDestroy | JSR-250 注解,Bean 销毁前执行的方法。 | @PreDestroy public void cleanup() { ... } |
@Lazy | 延迟初始化 Bean(首次使用时创建)。 | @Lazy @Service public class HeavyService { ... } |
五、AOP 与事务
| 注解 | 作用 | 示例 |
|---|---|---|
@Aspect | 定义切面类,结合 @Pointcut 和通知注解(@Before, @After 等)。 | @Aspect @Component public class LoggingAspect { ... } |
@Transactional | 声明式事务管理,标注在类或方法上。 | @Transactional(rollbackFor = Exception.class) |
六、Web 相关(Spring MVC)
| 注解 | 作用 | 示例 |
|---|---|---|
@RequestMapping | 映射 HTTP 请求到控制器方法(支持 REST 方法简写如 @GetMapping)。 | @GetMapping("/users") public List<User> getUsers() { ... } |
@RequestBody | 将请求体内容(如 JSON)绑定到方法参数。 | @PostMapping("/users") public void createUser(@RequestBody User user) { ... } |
@ResponseBody | 将方法返回值直接写入响应体(如返回 JSON)。 | @ResponseBody @GetMapping("/info") public User getUser() { ... } |
@RestController | 组合 @Controller + @ResponseBody,用于 REST API。 | @RestController public class UserApiController { ... } |
七、测试相关
| 注解 | 作用 | 示例 |
|---|---|---|
@SpringBootTest | Spring Boot 测试类,加载完整应用上下文。 | @SpringBootTest class UserServiceTest { ... } |
@MockBean | 在测试中注入 Mock Bean。 | @MockBean private UserRepository userRepository; |
@Test | JUnit 测试方法。 | @Test void testCreateUser() { ... } |
八、Spring Boot 核心注解
| 注解 | 作用 | 示例 |
|---|---|---|
@SpringBootApplication | 组合 @Configuration + @EnableAutoConfiguration + @ComponentScan,标记主启动类。 | @SpringBootApplication public class MyApp { ... } |
@EnableAutoConfiguration | 启用 Spring Boot 自动配置。 | @EnableAutoConfiguration |
总结
掌握这些核心注解是使用 Spring 框架的基础,合理运用它们可以极大简化开发:
- 依赖注入:
@Autowired,@Resource,@Value - Bean 声明:
@Component,@Service,@Bean - 配置管理:
@Configuration,@Profile,@Conditional - Web 开发:
@RestController,@RequestMapping - 事务与AOP:
@Transactional,@Aspect
结合具体场景灵活使用,能显著提升代码的可维护性和扩展性。
相关文章:
spring 核心注解整理
总结一下,核心注解涵盖以下方面: 依赖注入相关注解Bean定义和组件扫描注解配置类相关注解条件化配置注解作用域和生命周期注解AOP相关注解事务管理注解属性注入相关注解测试相关注解Spring Boot核心注解(如果需要) 每个部分列出…...
用 Python 也能做微服务?
一、Python 和微服务,是敌是友? Python 因其极强的开发效率与生态,一直是数据处理、AI、Web 开发的主力选手。但在“微服务”这个领域,它一直处于边缘地带: 服务注册 / 发现?🤷♂️ 没有统一…...
Android 13系统定制实战:基于系统属性的音量键动态屏蔽方案解析
1. 需求背景与实现原理 在Android 13系统定制化开发中,需根据设备场景动态屏蔽音量键(VOLUME_UP/VOLUME_DOWN)功能。其核心诉求是通过系统属性(persist.sys.roco.volumekey.enable)控制音量键的响应逻辑,确…...
Maya基本操作
基本操作 按住ALT键,左键旋转视角,中键平移视角,右键放大缩小视角。 按空格键切换4格视图。 导入FBX格式文件后,无贴图显示。 按6键开启。着色纹理显示 坐标轴相关 修改菜单-左键最上面的虚线。固定修改选项窗口。 选中物体…...
SQL Server Management Studio(SSMS)安装教程
目录 一、SSMS的下载 二、SSMS 的安装 三、连接服务器 四、卸载 SSMS 一、SSMS的下载 1.进入 SQL Server Management Studio 官方下载页面:SQL Server Management Studio点击进入下载页面 2.点击链接开始下载,浏览器右上角会显示下载进度;…...
若依前端框架增删改查
1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…...
LiteratureReading:[2023] GPT-4: Technical Report
文章目录 一、文献简明(zero)二、快速预览(first)1、标题分析2、作者介绍3、引用数4、摘要分析(1)翻译(2)分析 5、总结分析(1)翻译(2)…...
区块链交易
文章目录 交易准备合约和代码逻辑合约compile.jsindex.js 运行 交易 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/02-web3js-transaction/README-cn.md 本项目包含对交易进行签名,发送,接收交易回执,验证…...
Walrus 经济模型 101
本文作者:Steve_4P,文章仅代表作者观点。 要点总结 2025 年 3 月 20 日,Walrus 基金会宣布成功融资 约 1.4 亿美元,投资方包括 Standard Crypto、a16z 等机构。Walrus 当前估值约 20 亿美元,其中 7% 代币供应量分配给…...
SpringCould微服务架构之Docker(1)
项目中微服务比较多的时候,一个一个手动的部署太麻烦了,所以就需要用到Docker。 项目部署中的问题: Docker是一种快速交付应用、运行应用的技术。...
mac丝滑安装Windows操作系统【丝滑简单免费】
mac丝滑安装Windows操作系统【丝滑&简单&免费】 记录mac丝滑安装windows系统1、安装免费版 VMware fusion 132、安装Windows镜像文件3、跳过联网安装(完成1后将2拖入1 点点点 即可来到3的环节)4、 安装vmware 工具【非常重要,涉及联网…...
系统与网络安全------网络应用基础(2)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 交换机 认识交换机 交换机,Switch 用户将多台计算机/交换机连接在一起,组建网络 交换机负责为其中任意两台计算机提供独享线路进行通信 非网管型交换机 即插即用交换机 即插即用&…...
eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true
eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多,别找错了) SHOW_MEMORY_MONITORtrue 重启 -xms 1024…...
【论文笔记】生成对抗网络 GAN
GAN 2014 年,Ian Goodfellow 等人提出生成对抗网络(Generative Adversarial Networks),GAN 的出现是划时代的,虽然目前主流的图像/视频生成模型是扩散模型(Diffusion Models)的天下,…...
《鸟哥的Linux私房菜基础篇》---5 vim 程序编辑器
目录 一、vim程序编辑器的简介 二、命令模式快捷键(默认模式) 1、光标移动 2、编辑操作 3、搜索与替换 三、插入模式快捷键 四、底行模式快捷键(按:进入) 五、高级技巧 1、分屏操作 2、多文件编辑 3、可视化…...
spring+k8s 功能说明
以下是一个结合 Kubernetes(k8s) 和 Spring Boot 的完整实例,涵盖应用开发、容器化、部署到 Kubernetes 集群的全流程。 1. 创建 Spring Boot 应用 1.1 项目初始化 使用 Spring Initializr 生成一个简单的 REST API 项目: • 依…...
Enovia许可分析的自动化解决方案
随着企业产品生命周期管理(PLM)需求的不断演变,Enovia许可分析已成为确保资源优化和合规性的关键环节。然而,传统的手动许可分析方法往往效率低下、易出错,并且难以应对大规模数据。为了解决这一挑战,Enovi…...
【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR
总结:建议大家选择稳定版本的分支,直接拉取 master 分支,可能出现一下后面更新代码导致缺失一些环境内容。 启动报错 一直停留在 INSTALL 界面 我是通过 Docker 进行安装的,由于项目开发者不严谨导致,遇到一个奇怪的…...
【学Rust写CAD】11 2D CAD可用rust库
使用 Rust 开发 2D CAD 应用时,选择合适的库是关键。以下是一些适合用于 2D CAD 开发的 Rust 库和工具,涵盖图形渲染、几何计算、用户界面等方面: 图形渲染 lyon 简介: lyon 是一个用于 2D 图形渲染的 Rust 库,支持路径填充、描边…...
怎样基于安卓部署deepseek?
要在安卓设备上部署DeepSeek(或者类似的深度学习模型),您需要将模型从开发环境迁移到安卓应用中。具体步骤涉及将深度学习模型转化为安卓设备能够运行的格式,并配置安卓应用以支持这种模型的运行。以下是一个简化的步骤指南&#…...
【Excel使用技巧】某列保留固定字段或内容
目录 ✅ 方法一:使用 Excel 公式提取 body 部分 🔍 解释: ✅ 方法二:批量处理整列数据 🚨 注意事项 🚨 处理效果 我想保留Excel某一列的固定内容,比如原内容是: thread entry i…...
a-date-picker 格式化日期格式 YYYY-MM-DD HH:mm:ss
<template><a-range-pickerv-model:value"dateRange":show-time"{ format: HH:mm:ss, // 时间部分格式defaultValue: [moment(00:00:00, HH:mm:ss), moment(23:59:59, HH:mm:ss)] // 默认时间范围}"format"YYYY-MM-DD HH:mm:ss" // 整体…...
vue3,element-plus 表格搜索过滤数据
1、表格数据 // 表格数据 import type { User } from "/interface"; const tableData ref<User[]>([]); 2、 表格搜索过滤数据 // 搜索内容 const search ref(""); // 表格过滤数据 const tableFilterData computed(() >tableData.value.fi…...
WordPress 性能优化技术指南:打造快速加载的网站
WordPress 是全球最流行的内容管理系统(CMS),以其灵活性和易用性深受用户喜爱。然而,随着网站内容和功能的增加,加载速度可能会变慢,影响用户体验和搜索引擎排名。在2025年的数字化环境中,网站性…...
vue中上传接口file表单提交二进制文件流
1.使用elementui上传组件 要做一个选择文件后,先不上传,等最后点击确定后,把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件,设置auto-uploadfalse,也就是选择文件后不立刻上传。 <el-uplo…...
【学习笔记】卷积网络简介及原理探析
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接…...
element-plus中Cascader级联选择器组件的使用
目录 一.基本使用 二.进阶使用 1.如何获取最后一级选项的值? 2.如何让级联选择器的输入框只展示最后一级? 三.实战 1.场景描述 2.实现步骤 ①设计后端返回值Vo ②编写controller ③编写service ④编写mapper层 ⑤在前端,通过发送…...
计算机网络的分类——按照按拓扑结构分类
计算机的拓扑结构是引用拓扑学中研究和大小、形状无关的点、线关系的方法,将网络中的计算机和通信设备抽象为一个点,把传输介质抽象成一条线,由点和线组成的几何图形就是计算机网络的拓扑结构。计算机网络的拓扑结构主要由通信子网决定&#…...
【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
文章目录 前言一、阔感体验,大有不同二、鸿蒙AI,大有智慧三、便携出行,大有不同四、首款全面搭载 HarmonyOS 5 的手机五、卓越性能,可靠安心六、红枫影像,大放光彩预热:鸿蒙电脑HarmonyOS 5 升级计划小结 前…...
MQ,RabbitMQ,MQ的好处,RabbitMQ的原理和核心组件,工作模式
1.MQ MQ全称 Message Queue(消息队列),是在消息的传输过程中 保存消息的容器。它是应用程序和应用程序之间的通信方法 1.1 为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理࿰…...
