Spring @Lazy简要介绍

本文详细介绍了Spring IOC容器中@Lazy注解的使用,该注解用于实现Bean的延迟加载。默认情况下,@Lazy注解的value属性为true,表示Bean在需要时才进行实例化。当设置为false时,Bean会在容器启动时被初始化。理解并正确运用@Lazy,可以优化应用资源的加载策略,提高系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringIOC容器一般是在启动的时候就实例化所有的单例Bean,如果需要延迟加载或者叫做延迟实例的话, 那就可以使用@Lazy注解。

Lazy 注解源码如下

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {
    boolean value() default true;
}

Lazy注解内就只有一个boolean类型的value属性,默认为true。(true代表延迟加载,false不做延迟加载)

在这里看@Lazy(value=false)是没有意义的(对象初始化的时候就创建)。
所以在需要使用的时候写上@Lazy就行了。

### @Lazy 注解的使用规则 #### 定义与作用 `@Lazy` 是 Spring 框架中的一个重要注解,用于指示 Bean 的延迟初始化行为。默认情况下,在应用程序启动时,所有的单例 Bean 都会被立即实例化并放入容器中。然而通过 `@Lazy` 可以改变这种行为,使得被标记的 Bean 不会在应用上下文加载时创建,而是在第一次请求该 Bean 时才会进行初始化[^2]。 #### 使用场景 此注解可以应用于多种不同的地方来控制依赖注入的行为: - **类级别**:当直接放在组件类上时(比如带有 `@Component`, `@Service`, 或者 `@Repository`),意味着此类对应的 Bean 将会按需加载而不是随着ApplicationContext一同启动就完成初始化。 - **方法级别**:如果放置于由 `@Configuration` 类内的@Bean 方法之上,则表示仅当特定工厂方法返回的对象首次被访问到时才去构建它;对于配置类内部定义的所有 bean,默认都是懒加载模式除非显式指定非懒加载属性。 - **字段/构造器参数处**:在自动装配的地方加上 `@Lazy` 参数可以让其关联对象也遵循同样的原则——即直到实际需要用到它们之前都不会触发相应的实例化进程。 #### 实际案例展示 下面给出一段简单的 Java 代码片段用来说明如何利用 `@Lazy` 来实现懒加载功能: ```java import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @Component public class MyBean { private final AnotherBean anotherBean; // 构造函数注入另一个bean, 并设置为懒加载 public MyBean(@Lazy AnotherBean anotherBean){ this.anotherBean = anotherBean; System.out.println("@MyBean constructor called"); } } ``` 在这个例子中,只有当我们尝试获取 `MyBean` 对象的时候,`AnotherBean` 才会被创建出来,从而实现了真正的按需分配资源的效果。 #### 特殊注意事项 需要注意的是,“懒处理”并不完全等同于传统意义上的“懒加载”,因为前者不仅限于此种方式还可以扩展至更多层面的操作优化之中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值