Spring @Scope, @Lazy, @DependsOn, @Required, @Lookup

Q\&A\] @Scope 引入背景 传统的 Spring 配置中,Bean 的作用域(如 singleton、prototype)只能通过 XML 配置定义,不够直观且与代码分离,提供一种基于注解的方式定义 Bean 的作用域。 \[Q\&A\] @Lazy 引入背景 默认情况下,Spring 容器会在启动时加载所有单例 Bean,这可能导致启动慢、资源占用高,尤其是某些 Bean 并不总是被使用,引入@Lazy允许开发者延迟初始化 Bean,直到第一次被使用。 1、Spring容器在启动时会初始化所有的单例(singleton)Bean,而使用@Lazy后,Bean会在第一次被使用时才进行初始化。 2、用于@Component 类上(非 @Configuration类):该Bean将会被懒加载初始化。 3、用于@Configuration配置类上:该类中所有的@Bean方法都会受到影响,即这些Bean都将被懒加载。 \[Q\&A\] @DependsOn 引入背景 Spring 默认采用自动装配机制,Bean 的初始化顺序通常由依赖关系决定。但在某些复杂场景下,需要显式控制 Bean 的初始化顺序。显式指定某些 Bean 必须在当前 Bean 之前初始化。 \[Q\&A\] @Required 引入背景 早期 Spring 使用 setter 注入时,无法强制要求某个属性必须被注入,容易导致运行时空指针异常。标记某个属性必须被注入,否则抛出异常。 \[Q\&A\] @Lookup 引入背景 在某些场景下,希望每次调用一个方法都能获取一个新的 Bean 实例(如 prototype 作用域 Bean),但直接 new 对象会破坏 Spring 的管理机制。支持从容器中动态获取 Bean,允许 Spring 动态决定返回哪个 Bean 实例。 | 注解 | 用途 | 是否支持作用域控制 | 是否影响初始化顺序 | 是否支持原型模式 | 是否已弃用 | 引入年份(关联 Spring 版本参考) | |:-----------|-----------------|:---------:|:---------:|:--------:|:-------------:|---------------------------| | @Scope | 控制Bean作用域 | ✔️ | ❌ | ✔️ | ❌ | Spring 2.0+(约 2006-2007年) | | @Lazy | 延迟初始化 | ❌ | ✔️(延迟加载) | ❌ | ❌ | Spring 2.0+(约 2006-2007年) | | @DependsOn | 强制依赖其他Bean | ❌ | ✔️(控制顺序) | ❌ | ❌ | Spring 2.0+(约 2006-2007年) | | @Required | 标记必须注入的属性 | ❌ | ❌ | ❌ | ✔️(Spring 5+) | Spring 2.0+(约 2006-2007年) | | @Lookup | 动态获取Bean或覆盖方法实现 | ❌ | ❌ | ✔️ | ❌ | Spring 2.0+(约 2006-2007年) | ## 典型用法 [Spring @Scope 典型使用场景](https://blog.csdn.net/weixin_37646636/article/details/130640169) [Spring @Lazy 典型使用场景](https://blog.csdn.net/weixin_37646636/article/details/129627092) [Spring @DependsOn 典型使用场景](https://blog.csdn.net/weixin_37646636/article/details/130639979) [Spring @Required 典型使用场景](https://blog.csdn.net/weixin_37646636/article/details/130639868) [Spring @Lookup 典型使用场景](https://blog.csdn.net/weixin_37646636/article/details/129641200)

相关推荐
@昵称不存在18 分钟前
Flask input 和datalist结合
后端·python·flask
zhuyasen35 分钟前
Go 分布式任务和定时任务太难?sasynq 让异步任务从未如此简单
后端·go
东林牧之1 小时前
Django+celery异步:拿来即用,可移植性高
后端·python·django
YuTaoShao1 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw2 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨2 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
AntBlack2 小时前
从小不学好 ,影刀 + ddddocr 实现图片验证码认证自动化
后端·python·计算机视觉
Pomelo_刘金2 小时前
Clean Architecture 整洁架构:借一只闹钟讲明白「整洁架构」的来龙去脉
后端·架构·rust
双力臂4042 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
心之语歌3 小时前
Spring AI MCP 客户端
人工智能·spring·github