在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將不會被創建,從而完成了全局懶加載