spring的中我们配置basePackages什么是进行扫描的?

138 阅读1分钟

spring的中我们配置basePackages什么是进行扫描的?

从refresh()入口开始

AbstractApplicationContext#refresh()

image.png

AbstractApplicationContext#obtainFreshBeanFactory

image.png

AbstractRefreshableApplicationContext#refreshBeanFactory

image.png

AbstractXmlApplicationContext#loadBeanDefinitions image.png

AbstractXmlApplicationContext#loadBeanDefinitions image.png

AbstractBeanDefinitionReader#loadBeanDefinitions

image.png

AbstractBeanDefinitionReader#loadBeanDefinitions image.png

AbstractBeanDefinitionReader#loadBeanDefinitions image.png

AbstractBeanDefinitionReader#loadBeanDefinitions image.png

XmlBeanDefinitionReader#loadBeanDefinitions image.png

XmlBeanDefinitionReader#loadBeanDefinitions image.png

XmlBeanDefinitionReader#doLoadBeanDefinitions image.png

XmlBeanDefinitionReader#registerBeanDefinitions

image.png

DefaultBeanDefinitionDocumentReader#registerBeanDefinitions image.png

DefaultBeanDefinitionDocumentReader#doRegisterBeanDefinitions image.png

DefaultBeanDefinitionDocumentReader#parseBeanDefinitions image.png

BeanDefinitionParserDelegate#parseCustomElement image.png

BeanDefinitionParserDelegate#parseCustomElement

image.png

NamespaceHandlerSupport#parse image.png

ComponentScanBeanDefinitionParser#parse

image.png

ClassPathBeanDefinitionScanner#doScan

image.png

从上面的doScan方法可以看出,根据我们配置的basePackages进行扫描,将definitions包装成 BeanDefinitionHolder返回

具体细节,请看下回分解。