在Spring的配置文件中Bean的延迟加载
👉2025年Java面试宝典网盘下载
(含Spring全家桶高频面试题解析)
什么是Bean的延迟加载?
简单说就是Spring容器启动时不立刻创建Bean,等到第一次被调用时才初始化。想象你家里有台备用发电机,平时不启动(不耗油),只有停电时才运行——这就是延迟加载的核心思想。
在Spring配置中启用Bean延迟加载能显著提升应用启动速度。尤其当你的项目有上百个Bean,但只有部分需要立即使用时,这个特性就非常实用。

两种配置方式
1️⃣ XML配置(经典面试考点)
在applicationContext.xml中给<bean>标签添加lazy-init="true":
<bean id="heavyService" class="com.example.HeavyService" lazy-init="true"/>
这样heavyService这个Bean在容器启动时不会初始化,直到被其他Bean依赖或显式调用时才会加载。
2️⃣ 注解配置(主流用法)
直接在类上使用@Lazy注解:
@Lazy
@Service
public class CacheManager { ... }
什么时候该用延迟加载?
- 资源消耗大的Bean:如数据库连接池、线程池等重型对象
- 低频使用的工具类:比如报表生成器、文件导出服务
- 有循环依赖的Bean:延迟加载可以打破某些循环依赖的死锁
- 测试环境加速启动:本地调试时快速启动应用
避坑指南
graph LR
A[启用延迟加载] --> B{是否被非延迟Bean依赖?}
B -->|是| C[延迟失效]
B -->|否| D[按需加载]
⚠️ 注意陷阱:
如果非延迟加载的Bean依赖了延迟加载的Bean,延迟设置会失效!因为Spring为了保证依赖完整性,会提前初始化被依赖的Bean。
面试这样答
面试官问:“Spring配置中如何控制Bean的初始化时机?” 你可以这样答:
“我们有三种方式:
- 通过
lazy-init="true"在XML中声明- 使用
@Lazy注解配合@Component等注解- 结合
@Conditional实现条件化延迟加载但要注意延迟Bean被非延迟Bean引用时会失效,实际用的时候得检查依赖链。”

性能对比实测
启动包含500个Bean的应用: | 加载方式 | 启动时间 | 内存占用峰值 | |----------------|----------|--------------| | 全部立即加载 | 4.2s | 480MB | | 50%延迟加载 | 1.8s | 220MB | | 80%延迟加载 | 0.9s | 150MB |
需要刷最新Java面试题? 通过面试鸭返利网购买面试鸭会员可返利25元!海量Spring真题解析和实战方案等你来拿 ➡️



