Java面试题更新 2026-08-05

在 Spring 框架中,@Lazy 注解主要用来实现什么功能?它是如何影响 Bean 的实例化时机的?

后端开发技术原理Java

考察说明

考查对 Spring Bean 生命周期及延迟初始化机制的理解。

回答思路

  1. 【回答框架 1】定义:@Lazy 是 Spring 框架提供的注解,用于标记 Bean 的延迟初始化,即默认情况下 Spring 容器启动时立即创建单例 Bean,而使用 @Lazy 后,Bean 会在首次被使用时才创建。
  2. 【回答框架 2】使用方式:@Lazy 可标注在类上,也可标注在注入点(如 @Autowired 字段、构造器、方法参数)上,分别控制 Bean 定义或注入的延迟解析。
  3. 【回答框架 3】影响:开启延迟初始化可以加快容器启动速度,减少启动时的资源消耗,但可能导致首次调用时出现延迟,并且如果 Bean 初始化存在问题,错误会被推迟到运行时才暴露。
  4. 【回答框架 4】配置级别:Spring Boot 支持通过 spring.main.lazy-initialization 全局开启延迟初始化,但要注意全局开启可能影响所有 Bean,需权衡利弊。
  5. 【关键点 1】@Lazy 实现 Bean 的延迟实例化,默认单例 Bean 在容器启动时创建。
  6. 【关键点 2】作用于类时,影响 Bean 的创建时机;作用于注入点时,仅影响该注入的解析。
  7. 【关键点 3】可用于优化启动速度,但会延迟错误发现并可能增加首次访问延迟。
  8. 【易错点 1】不要误以为 @Lazy 会改变 Bean 的作用域,它只影响初始化时机。
  9. 【易错点 2】在循环依赖场景中,@Lazy 可能用于打破循环,但需谨慎,它只是延迟代理创建,并非解决所有循环依赖问题。
  10. 【易错点 3】全局懒加载(spring.main.lazy-initialization=true)可能引发 Bean 之间初始化顺序相关的隐性问题。