下面就是深入源码探究,会分析以下三种情况:
bean A没有引用任何其他bean,且配置成懒加载
bean A引用了bean B,且bean A配置成懒加载
bean A引用了bean B,bean A...没有配置为懒加载,bean B配置为懒加载
首先代码入口还是 AbstractApplicationContext#refresh方法,其中在 AbstractApplicationContext#finishBeanFactoryInitialization...bd.isLazyInit(),会判断bean是否为抽象类、单例、懒加载,如果不符合就不会执行if里的代码,其实第一、二中情况都不符合的,所以不会执行到if语句里的代码.关键是第三种情况,分析思路之前这篇...也就是在创建bean A的时候,在实例化其属性时,会创建bean B,有兴趣的朋友可以打断点调试,以下总结:
bean配置lazy-init="true"时,在容器初始化时不会创建该bean
若一为单例且非懒加载的...bean A引用了懒加载bean B时,在bean A被创建时,会创建bean B
非单例或为抽象类或配置lazy-init="true"的bean,都不会在容器初始化时创建bean