Spring 容器相关的核心注解​

以下是 Spring 容器中用于 ​​Bean 管理、依赖注入、配置控制​​ 的关键注解,按功能分类说明:

​1. Bean 声明与注册​

注解作用示例
@Component通用注解,标记一个类为 Spring Bean(自动扫描注册)

@Component

public class UserService { ... }

@Service专用于业务逻辑层(功能同 @Component,但语义更清晰)

@Service

public class OrderService { ... }

@Repository专用于数据访问层(DAO),自动转换数据库异常为 Spring 统一异常

@Repository

public class UserDao { ... }

@Controller专用于 MVC 控制器层(处理 HTTP 请求)

@Controller

public class UserController { ... }

@RestController@Controller + @ResponseBody(直接返回 JSON/XML)

@RestController

public class ApiController { ... }

@Configuration标记类为配置类(定义 @Bean 方法)

@Configuration

public class AppConfig { ... }

@Bean在配置类中显式声明 Bean(适用于第三方库或复杂对象)

@Bean

public RestTemplate restTemplate() { return new RestTemplate(); }


​2. 依赖注入(DI)​

注解作用示例
@Autowired自动注入依赖(默认按类型匹配,可结合 @Qualifier 按名称匹配)

@Autowired

private UserService userService;

@Qualifier指定具体注入的 Bean 名称(解决多个同类型 Bean 冲突)@Autowired @Qualifier("masterDataSource") private DataSource ds;
@ResourceJSR-250 标准注解,按名称注入(类似 @Autowired + @Qualifier@Resource(name = "slaveDataSource") private DataSource ds;
@Value注入配置文件中的属性或简单值

@Value("${app.timeout}")

private int timeout;


​3. 条件化与作用域控制​

注解作用示例
@Scope定义 Bean 的作用域(如单例、原型、会话等)

@Scope("prototype")

public class Task { ... }

@Lazy延迟初始化 Bean(首次使用时才创建)

@Lazy @Service

public class HeavyService { ... }

@Conditional根据条件决定是否注册 Bean(需实现 Condition 接口)

@Conditional(OnDevEnvCondition.class)

@Bean

public DevTool devTool() { ... }

@Profile指定 Bean 在特定环境(如 dev/test/prod)下生效

@Profile("prod")

@Bean

public DataSource prodDataSource() { ... }


​4. 生命周期回调​

注解作用示例
@PostConstructBean 初始化后执行(相当于 init-method

@PostConstruct

public void init() { ... }

@PreDestroyBean 销毁前执行(相当于 destroy-method

@PreDestroy

public void cleanup() { ... }


​5. 配置与扫描控制​

注解作用示例
@ComponentScan指定 Spring 扫描 Bean 的包路径(用于启动类或配置类)

@ComponentScan("com.example")

public class App { ... }

@Import导入其他配置类或普通类(使其成为 Spring Bean)@Import({DatabaseConfig.class, SecurityConfig.class})
@PropertySource加载外部配置文件(如 application.properties@PropertySource("classpath:custom.properties")

​6. AOP 相关注解​

注解作用示例
@Aspect声明一个切面类@Aspect @Component public class LoggingAspect { ... }
@Before/@After定义通知(Advice)在目标方法执行前/后运行@Before("execution(* com.example.service.*.*(..))")
@Around环绕通知(可控制目标方法是否执行)@Around("@annotation(com.example.LogExecutionTime)")

​7. 测试相关注解​

注解作用示例
@SpringBootTest启动完整的 Spring 容器进行集成测试@SpringBootTest class UserServiceTest { ... }
@MockBean向容器注入 Mock 对象(替代真实 Bean)@MockBean private UserRepository userRepository;

​总结:Spring 容器的核心注解​

  1. ​Bean 注册​​:@Component@Service@Bean@Configuration
  2. ​依赖注入​​:@Autowired@Resource@Value
  3. ​条件控制​​:@Profile@Conditional@Scope
  4. ​生命周期​​:@PostConstruct@PreDestroy
  5. ​配置管理​​:@ComponentScan@PropertySource@Import

补充(与内容主题无关):

如果有一个service接口被2个类实现了,那么只能用@Resource/@Autowired+@Qualifier

@Service("timeQuantumServiceA")
public class TimeQuantumServiceImplA implements TimeQuantumService {}@Service("timeQuantumServiceB")
public class TimeQuantumServiceImplB implements TimeQuantumService {}@Autowired
@Qualifier("timeQuantumServiceA") // 必须指定名称
private TimeQuantumService timeQuantumService;

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

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

相关文章

C与指针5——字符串合集

常用函数 1、拷贝、长度、比较 size_t strlen();\\返回无符号整形 char* strcpy();char* strncpy();\\拷贝 int strcmp();int strncmp();\\比较 char* strcat();char* strncat();\\连接2、查找 char* strchr(const char * st,int ch);\\找字符第一次出现的位置 char* strrch…

论软件需求管理

目录 摘要(300~330字) 正文(2000~2500字,2200字为宜) 背景介绍(500字做左右) 论点论据(1500字做左右) 收尾(200字左右) 注:本篇论…

[特殊字符] 如何在比赛前调整到最佳状态:科学与策略结合的优化指

🧠 概述 在竞技体育中,赛前状态的调整对比赛结果起着决定性作用。所谓“最佳状态”,不仅指生理上的巅峰表现,更包括心理、认知、营养和恢复等多方面的协同优化。本文结合运动科学、心理学和营养学的研究成果,探讨赛前…

一种实波束前视扫描雷达目标二维定位方法——论文阅读

一种实波束前视扫描雷达目标二维定位方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 运动平台几何建模与回波信号构建2.1.1 距离历史建模2.1.2 回波信号模型2.2 距离向运动补偿技术2.2.1 匹配滤波与距离压缩2.3 加权最小二乘目标函数2.3.1 方位向信号…

基于 Spring Boot 瑞吉外卖系统开发(八)

基于 Spring Boot 瑞吉外卖系统开发(八) 自动填充公共字段 MyBatis-Plus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,降低了冗余代码的数量。本…

【前端】从零开始的搭建结构(技术栈:Node.js + Express + MongoDB + React)book-management

项目路径总结 后端结构 server/ ├── controllers/ # 业务逻辑 │ ├── authController.js │ ├── bookController.js │ ├── genreController.js │ └── userController.js ├── middleware/ # 中间件 │ ├── authMiddleware…

【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means

一、向量化表示的核心概念 1.1 特征空间与向量表示 多维特征表示:通过多个特征维度(如体型、毛发长度、鼻子长短等)描述对象,每个对象对应高维空间中的一个坐标点,来表示狗这个对象,这样可以区分出不同种…

如何用CSS实现HTML元素的旋转效果

原文:如何用CSS实现HTML元素的旋转效果 | w3cschool笔记 (本文为科普文章,请勿标记为付费) 在网页制作中,为 HTML 元素设置旋转效果可使其更灵动,提升用户体验。本文将深入浅出地介绍如何利用 CSS 实现 H…

Spark集群搭建之Yarn模式

配置集群 1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。 2. 修改一下spark的环境变量,/etc/profile.d/my_env.sh 。 # spark 环境变量 export SPARK_HOME/opt/module/spark-yarn export PATH$PATH:$SPARK_HOME/bin:$SP…

xLua笔记

Generate Code干了什么 肉眼可见的,在Asset文件夹生成了XLua/Gen文件夹,里面有一些脚本。然后对加了[CSharpCallLua]的变量寻找引用,发现它被XLua/Gen/DelegatesGensBridge引用了。也可以在这里查哪些类型加了[CSharpCallLua]。 public over…

【tcp连接windows redis】

tcp连接windows redis 修改redis.conf 修改redis.conf bind * -::*表示禁用保护模式,允许外部网络连接 protected-mode no

【序列贪心】摆动序列 / 最长递增子序列 / 递增的三元子序列 / 最长连续递增序列

⭐️个人主页:小羊 ⭐️所属专栏:贪心算法 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 摆动序列最长递增子序列递增的三元子序列最长连续递增序列 摆动序列 摆动序列 贪心策略:统计出所有的极大值和极小…

STM32F103C8T6使用MLX90614模块

首先说明: 1.SMBus和I2C的区别 我曾尝试用江科大的I2C底层去直接读取该模块,但是无法成功,之后AI生成的的代码也无法成功。 思来想去最大的可能就是SMBus这个协议的问题,根据百度得到的结果如下: SMBus和I2C的区别 链…

tp5 php获取农历年月日干支甲午

# 切换为国内镜像源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/# 再次尝试安装 composer require overtrue/chinese-calendar核心写法一个农历转公历,一个公历转农历 农历闰月可能被错误标记(例如 闰四月 应表示…

Ubuntu搭建Conda+Python开发环境

目录 一、环境说明 1、测试环境为ubuntu24.04.1 2、更新系统环境 3、安装wget工具 4、下载miniconda安装脚本 二、安装步骤 1、安装miniconda 2、source conda 3、验证版本 4、配置pip源 三、conda用法 1、常用指令 一、环境说明 1、测试环境为ubuntu24.04.1 2、更…

Vscode+git笔记

1.U是untracked m是modify modified修改了的。 2.check out 查看观察 3 status changed 暂存区 4.fetch v 取来拿来 5.orangion 起源代表远程分支 git checkout就是可以理解为进入的意思。

模拟SIP终端向Freeswitch注册用户

1、简介 使用go语言编写一个程序,模拟SIP-T58终端在Freeswitch上注册用户 2、思路 以客户端向服务端Freeswitch发起REGISTER请求,告知服务器当前的联系地址构造SIP REGISTER请求 创建UDP连接,连接到Freeswitch的5060端口发送初始的REGISTER请…

DeepSeek实战--LLM微调

1.为什么是微调 ? 微调LLM(Fine-tuning Large Language Models) 是指基于预训练好的大型语言模型(如GPT、LLaMA、PaLM等),通过特定领域或任务的数据进一步训练,使其适应具体需求的过程。它是将…

Docker与WSL2如何清理

文章目录 Docker与WSL2如何清理一、docker占据磁盘空间核心原因分析1. WSL2 虚拟磁盘的动态扩展特性2. Docker 镜像分层缓存与未清理资源 二、解决方案步骤 1:清理 Docker 未使用的资源步骤 2:手动压缩 WSL2 虚拟磁盘1. 关闭 WSL2 和 Docker Desktop2. 定…

在 IDEA 中写 Spark 程序:从入门到实践

在大数据处理领域,Apache Spark 凭借其出色的性能和丰富的功能受到广泛欢迎。而 IntelliJ IDEA 作为一款功能强大的 Java 集成开发环境,为编写 Spark 程序提供了极大的便利。本文将详细介绍如何在 IDEA 中搭建 Spark 开发环境并编写运行 Spark 程序&…