004Spring注解@Lazy

作者: 编程界的小学生 | 来源:发表于2018-07-03 14:02 被阅读74次

1、简介

@Lazy指定单例bean的加载时机。

2、基础类

public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3、@Lazy

3.1、取值

true
false

3.2、默认值

true

3.3、讲解

3.3.1、概述

懒加载,也称延时加载。仅对单例Bean生效。单例Bean是在Spring容器启动的时候加载的,添加@Lazy注解后就会延迟加载,在Spring容器启动的时候并不会加载,而是在当你第一次使用此bean的时候才会加载,但当你多次获取bean的时候不会重复加载,只是在第一次获取的时候会加载,这不是延迟加载的特性,而是单例Bean的特性。

3.3.2、证明单例

3.3.2.1、配置类
@Configuration
public class MainConfig {

    /**
     * 懒加载:
     *  针对于单实例bean:默认在容器启动的时候创建对象;
     *  懒加载:容器启动先不创建对象,第一次使用Bean的时候在创建对象并初始化放到容器中。
     *
     * @return
     */
    @Lazy
    @Bean("user")
    public User user() {
        System.out.println("给容器中添加user....");
        return new User("张三", 28);
    }
}
3.3.2.2、测试类
public class LazyTest {

    @Test
    public void test01() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        System.out.println("IOC容器创建完成......");
        User user1 = applicationContext.getBean("user", User.class);
        User user2 = applicationContext.getBean("user", User.class);
        System.out.println(user1 == user2);
    }

}
3.3.2.3、测试结果
IOC容器创建完成......
给容器中添加user....
true

PS:

结果分析:

首先我们发现:在创建容器的时候(创建完之前)并没有实例化各种scope为singleton的bean到容器中。然而是容器创建完,当获取这个bean的时候,才会创建对象,当第二次在继续获取这个对象的时候,不会继续创建bean,而是直接从容器中获取的,所以获取了两次都返回了同一个对象,所以对比地址返回true。

4、广告

img
  • 今日头条号:编程界的小学生

相关文章

  • 004Spring注解@Lazy

    1、简介 @Lazy指定单例bean的加载时机。 2、基础类 3、@Lazy 3.1、取值 3.2、默认值 tru...

  • @Lazy 注解

    Spring IoC (ApplicationContext) 容器一般都会在启动的时候实例化所有单实例 bean...

  • Spring 中的注解

    IoC 相关的注解 @Bean @ComponentScan @Scope @Lazy @Conditional ...

  • 4.15 使用java类进行配置

    常用注解@Configuraion@Bean@Lazy@PropertySource@Scope@DependsO...

  • jpa 懒加载问题解决

    @Entity实体类添加注解@Proxy(lazy = false)

  • Spring注解:@Lazy

    原创文章,转载请注明原文章地址,谢谢! @Lazy @Lazy主要针对于单实例Bean而言,是懒加载的意思。我们知...

  • JPA双向级联更新(不推荐)

    注解多对一@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeT...

  • Dagger2 进阶使用

    目录: @Qualifier @Named 注解的作用 懒加载 Lazy 和 Provider @Binds 的作...

  • spring常用注解-@lazy

    Spring会在应用程序上下文的启动时创建所有单例bean。这背后的原因很简单:立即避免和检测所有可能的错误,而不...

  • Sping中bean的延迟加载

    Srping中的延迟加载使用@Lazy注解或把 中的lazy-init属性设置为true就可以了。之前只了解这么多...

网友评论

本文标题:004Spring注解@Lazy

本文链接:https://www.haomeiwen.com/subject/eugduftx.html