在application.properties中配置:
spring.main.lazy-initialization=true
在运行SpringApplication的run方法时,代码如下:
其中调用了prepareContext,prepareContext代码如下:
当在配置文件中配置了spring.main.lazy-initialization=true后,SpringApplication实例的this.lazyInitialization为true,就会向Spring容器注册一个类型为LazyInitializationBeanFactoryPostProcessor,这个BeanFactoryPostProcessor会在refresh方法中被调用,LazyInitializationBeanFactoryPostProcessor代码如下:
它会从容器中获取BeanDefinition,然后循环遍历,调用每个BeanDefinition的setLazyInit方法并传入ture. 这样在refresh方法中调用finishBeanFactoryInitialization创建所有单例对象时这些bean将不会被创建,从而完成了全局懒加载