Spring中的 @Lazy的简单理解

Spring IoC (ApplicationContext) 容器一般都会在启动的时候实例化所有单实例 bean 。如果我们想要 Spring 在启动的时候延迟加载 bean,即在调用某个 bean 的时候再去初始化,那么就可以使用 @Lazy 注解。需要注意的是对于作用域(scope)为原型prototype的,默认情况下,其实例并不会随着容器的启动而开始实例化,而是再用到的时候才会去实例化。@Lazy可以添加在类上,也可以添加在方法(或者bean)上。

@Lazy 的属性的使用

@Lazy(value = true)或者@Lazy(true)或者@Lazy,对于value取值有false和true,默认值为 true。而false个人认为纯属多余,如果不使用,不标注该注解就可以了。@Lazy注解注解的作用主要是减少springIOC容器启动的加载时间

当出现循环依赖时,也可以添加@Lazy。

举例说明:

package com.itheima.course.configuration;

/**
 * @description 
 * @date 2021-02-18 18:23:32
 */
public class OracleDataSource {
    public OracleDataSource() {
        System.out.println("Call OracleDataSource  constructor");
    }
}
package com.itheima.course.configuration;

/**
 * @description
 * @date 2021-02-18 18:22:30
 */
public class MysqlDataSource {
    public MysqlDataSource() {
        System.out.println("Call MysqlDataSource constructor");
    }
}
package com.itheima.course.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

/**
 * @description configuration配置类
 * @date 2021-02-18 18:24:17
 */
@Configuration
// @Lazy
public class AppConfig {
    @Bean
    public MysqlDataSource mysqlDataSource() {
        oracleDataSource();
        return new MysqlDataSource();
    }

    @Bean
    public OracleDataSource oracleDataSource() {
        return new OracleDataSource();
    }
}
package com.itheima.course.configuration;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @description configuration详解举例
 * @date 2021-02-18 18:26:22
 */
public class TestAppconfig {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
        //MysqlDataSource mysqlDataSource1 = (MysqlDataSource) ac.getBean("mysqlDataSource");
    }
}

配置类添加@Lazy时的结果:没有结果输出

配置类不添加@Lazy时的结果:

Call OracleDataSource  constructor
Call MysqlDataSource constructor

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值