面试题:Spring 中的 @Lazy 注解的作用是什么?

@Lazy 是 Spring 框架中的一个注解,主要用于控制 Bean 的延迟初始化。它的作用如下:

  1. 延迟初始化:默认情况下,Spring 会在应用启动时初始化所有的单例 Bean。使用 @Lazy 注解后,Spring 会延迟初始化该 Bean,直到它第一次被使用时才进行初始化。
  2. 减少启动时间:通过延迟初始化,可以减少应用启动时的初始化时间,尤其是当某些 Bean 的初始化过程较为耗时或资源密集时。
  3. 避免不必要的初始化:某些 Bean 可能只在特定条件下才会被使用,使用 @Lazy 可以避免在不需要时进行初始化,从而节省资源。

使用场景

  • 大对象或耗时对象:如果某个 Bean 的初始化过程非常耗时或占用大量资源,可以使用 @Lazy 延迟其初始化。
  • 条件性依赖:如果某个 Bean 只在特定条件下才会被使用,可以使用 @Lazy 避免不必要的初始化。

示例

@Component
@Lazy
public class MyService {
    public MyService() {
        System.out.println("MyService initialized!");
    }

    public void doSomething() {
        System.out.println("Doing something...");
    }
}

在这个例子中,MyService Bean 不会在应用启动时初始化,只有在第一次被注入或使用时才会初始化。

配置方式

  • 类级别:在类上使用 @Lazy 注解,表示该类的所有 Bean 都延迟初始化。
  • 方法级别:在 @Bean 注解的方法上使用 @Lazy,表示该 Bean 延迟初始化。
  • 注入点:在 @Autowired@Inject 的注入点上使用 @Lazy,表示该依赖延迟初始化。

注意事项

  • 原型 Bean:对于原型(Prototype)Bean,@Lazy 的行为与单例 Bean 不同,因为每次请求原型 Bean 时都会创建一个新的实例。
  • 循环依赖:在存在循环依赖的情况下,使用 @Lazy 可以解决某些初始化顺序问题。

总结来说,@Lazy 注解主要用于优化应用启动时间和资源使用,特别是在处理大对象或条件性依赖时非常有用。

THE END
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容