当了这么久的程序员,才知道spring的Bean是懒加载吗?

本文探讨了Spring中Bean的懒加载特性,指出普通Bean在容器启动时初始化,而懒加载Bean则在第一次调用getBean时初始化。通过代码示例和源码分析,解释了Spring容器初始化过程及如何判断并处理懒加载Bean。
摘要由CSDN通过智能技术生成

前言

普通的bean的初始化是在容器启动初始化阶段执行的,而被lazy-init修饰的bean则是在从容器里第一次进context.getBean(“”)时进行触发。 Spring启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下面的初始化时用。
接下来对每个BeanDefinition进行处理,如果是懒加载的则在容器初始化阶段不处理,其他的则在容器初始化阶段进行初始化并依赖注入。
本文我说了很多次 Spring 容器初始化和bean初始化,一键获取spring源码相关知识点(含面试题)
容器的初始化有可能包括bean的初始化主要取决于该bean是否是懒加载的。

一、先睹为快

话不多说先写个例子看下这属性到底有什么作用,我们定义了一个叫做coffee的普通bean,代码如下:

1.普通非懒加载bean的演示

package com.test.spring;

public class Coffee {
   

    public Coffee() {
   
        System.out.println("正在初始化bean !!!调用无参构造函数");
    }

}
<bean name="coffee" class="com.test.spring.Coffee"/>
@Test
public void testLazyInit() {
   

    System.out.println("开始初始化Spring容器 ");
    
    // 非懒加载的bean会在容器初始化时进行bean的初始化,后面会拿Spring启动时的源码进行分析
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
    
   // 非懒加载的bean 的构造函数会在这个位置打印
   System.out.println("Spring容器初始化完毕");

   System.out.println("开始从容器中获取Bean");

   Coffee coffee = context.getBean("coffee", Coffee.class);

   System.out.println("获取完毕  bean :" + coffee);
}

运行结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值