首页 > 其他分享 >SpringBoot复习:(46)全局的bean懒加载是怎么实现的?

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?

时间:2023-08-21 17:37:26浏览次数:48  
标签:lazy 调用 SpringBoot 46 spring bean main true BeanDefinition


在application.properties中配置:

spring.main.lazy-initialization=true

在运行SpringApplication的run方法时,代码如下:

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?_后端


其中调用了prepareContext,prepareContext代码如下:

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?_配置文件_02


当在配置文件中配置了spring.main.lazy-initializatinotallow=true后,SpringApplication实例的this.lazyInitialization为true,就会向Spring容器注册一个类型为LazyInitializationBeanFactoryPostProcessor,这个BeanFactoryPostProcessor会在refresh方法中被调用,LazyInitializationBeanFactoryPostProcessor代码如下:

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?_配置文件_03


它会从容器中获取BeanDefinition,然后循环遍历,调用每个BeanDefinition的setLazyInit方法并传入ture. 这样在refresh方法中调用finishBeanFactoryInitialization创建所有单例对象时这些bean将不会被创建,从而完成了全局懒加载


标签:lazy,调用,SpringBoot,46,spring,bean,main,true,BeanDefinition
From: https://blog.51cto.com/amadeusliu/7177753

相关文章