super(parent)
AbstractApplicationContext<br>#resourceLoader
AbstractApplicationContext<br>#parent 为空
setConfigLocations ()<br>设置文件加载并加载bean定义
AbstractRefreshableConfigApplicationContext<br>#resolvePath()
getEnvironment()
new StandardEnvironment()
AbstractRefreshableConfigApplicationContext<br>#setconfiglocations()
AbstractRefreshableConfigApplicationContext<br>#configLocations
refresh()
prepareRefresh()<br>前戏
obtainFreshBeanFactory()<br>创建工厂并加载beanDefinition
refreshBeanFactory()
hasBeanFactory()
destroyBeans()
closeBeanFactory()
beanFactory=createBeanFactory()<br>
getInternalParentBeanFactory()
new DefaultListableBeanFactory(null) <br>
beanFactory.setSerializationId(getId())
customizeBeanFactory(beanFactory)
loadBeanDefinitions(beanFactory)<br>适配器模式
AbstractXmlApplicationContext<br>#loadBeanDefinitions()<br>
new XmlBeanDefinitionReader<br>初始化读取器
loadBeanDefinitions(beanDefinitionReader)
AbstractBeanDefinitionReader<br>#loadBeanDefinitions(java.lang.String...)
XmlBeanDefinitionReader<br>#doLoadBeanDefinitions<br>
doLoadDocument<br>读取xml为文档
registerBeanDefinitions<br>解析文档注册bean
createReaderContext
getNamespaceHandlerResolver
createDefaultNamespaceHandlerResolver
parseDefaultElement()
parseBeanDefinitionElement<br>
parseBeanDefinitionElement
decorateBeanDefinitionIfRequired
registerBeanDefinition()<br>实际调用DefaultListableBeanFactory的方法
fireComponentRegistered<br>
GenericBeanDefinition
子主题
delegate.parseCustomElement(ele)<br>
this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);
getHandlerMappings<br>
namespaceHandler.init();
NamespaceHandlerSupport#parse
findParserForElement<br>
configureScanner
scanner.doScan<br>
findCandidateComponents
scanCandidateComponents
getMetadataReaderFactory().getMetadataReader(resource)
isCandidateComponent
ScannedGenericBeanDefinition
registerBeanDefinition<br>
注册后置处理组件 registerComponents
delegate.parseCustomElement(root)
AnnotationConfigWebApplicationContext
GroovyWebApplicationContext
XmlWebApplicationContext
this.beanFactory = beanFactory
getBeanFactory()
prepareBeanFactory(beanFactory)<br>工厂的预初始化操作
setBeanClassLoader(getClassLoader())
setBeanExpressionResolver
addPropertyEditorRegistrar<br>
addBeanPostProcessor
设置忽略接口<br>ignoreDependencyInterface<br>
registerResolvableDependency
addBeanPostProcessor
registerSingleton
postProcessBeanFactory(beanFactory)<br>扩展接口<br>
invokeBeanFactoryPostProcessors(beanFactory)<br>调用bean的后置处理方法,在bean实例化之前
invokeBeanFactoryPostProcessors()<br>
beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class
ConfigurationClassPostProcessor
processConfigBeanDefinitions
parse<br>
parse
processConfigurationClass()
doProcessConfigurationClass
processMemberClasses
processPropertySource
addPropertySource
Process@ComponentScan
componentScanParser.parse
scanner.doScan
ConfigurationClassUtils
parse
processImports
getImports
processImports
ImportSelector
ImportBeanDefinitionRegistrar
other<br>
process @ImportResource
process @Bean
retrieveBeanMethodMetadata
processInterfaces
Process superclass
deferredImportSelectorHandler.process
processGroupImports
grouping.getImports()
group.process
AutoConfigurationImportSelector
getCandidateConfigurations()
loadSpringFactories
loadFactoryNames
loadSpringFactories
getOrDefault
processImports
reader.loadBeanDefinitions
loadBeanDefinitionsForConfigurationClass<br>
registerBeanDefinitionForImportedConfigurationClass
loadBeanDefinitionsForBeanMethod<br>
loadBeanDefinitionsFromImportedResources
GroovyBeanDefinitionReader
XmlBeanDefinitionReader
reader.loadBeanDefinitions
loadBeanDefinitionsFromRegistrars
registerBeanPostProcessors(beanFactory);<br>注册bean创建的拦截处理器<br>
registerBeanPostProcessors()
initMessageSource()<br>初始化消息源<br>
initApplicationEventMulticaster()<br>初始化事件<br>
onRefresh()<br>其他特殊bean<br>
registerListeners()<br>注册侦听器<br>
finishBeanFactoryInitialization(beanFactory)<br>实例化所有剩余的(非惰性初始化)单例<br>
setConversionService
addEmbeddedValueResolver
beanFactory.getBeanNamesForType(LoadTimeWeaverAware
beanFactory.setTempClassLoader
beanFactory.freezeConfiguration
beanFactory.preInstantiateSingletons
preInstantiateSingletons
for1
isFactoryBean
getBean(FACTORY_BEAN_PREFIX + beanName)
alreadyCreated.add(beanName)<br>
mbd.isPrototype()
else
getBean(beanName)
for2
finishRefresh()<br>发布相应的事件<br>
ApplicationContext.getBean()
AbstractBeanFactory#getBean(String name)<br>
AbstractBeanFactory.doGetBean<br>
doGetBean()
transformedBeanName(name)
getSingleton
parentBeanFactory
markBeanAsCreated
getMergedLocalBeanDefinition
dependsOn
AbstractAutowireCapableBeanFactory#createBean
resolveBeanClass(mbd, beanName);<br>
doResolveBeanClass
evaluateBeanDefinitionString
ClassUtils.forName
mbd.resolveBeanClass
ClassUtils.forName(className, classLoader);
mbdToUse.prepareMethodOverrides();
resolveBeforeInstantiation
doCreateBean
mbd.isSingleton
createBeanInstance
resolveBeanClass
doResolveBeanClass
evaluateBeanDefinitionString
ClassUtils.forName
mbd.resolveBeanClass
ClassUtils.forName(className, classLoader);
instanceSupplier
mbd.getInstanceSupplier();
obtainFromSupplier
instantiateUsingFactoryMethod
mbd.getFactoryMethodName
instantiateUsingFactoryMethod
autowireConstructor
autowireConstructor
determineConstructorsFromBeanPostProcessors
instantiateBean
SimpleInstantiationStrategy#instantiate
BeanUtils.instantiateClass
instantiateWithMethodInjection
CglibSubclassingInstantiationStrategy#instantiate
子主题<br>
new BeanWrapperImpl(beanInstance)
initBeanWrapper(bw);
instanceWrapper.getWrappedInstance()
instanceWrapper.getWrappedClass()
applyMergedBeanDefinitionPostProcessors
JmsListenerAnnotationBeanPostProcessor
ScheduledAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
InitDestroyAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
super.postProcessMergedBeanDefinition
findLifecycleMetadata
buildLifecycleMetadata
checkConfigMembers
beanDefinition.registerExternallyManagedInitMethod(methodIdentifier);
beanDefinition.registerExternallyManagedDestroyMethod(methodIdentifier);
findResourceMetadata
buildResourceMetadata
field.isAnnotationPresent(webServiceRefClass)
field.isAnnotationPresent(ejbClass)
field.isAnnotationPresent(Resource.class)
injectionMetadataCache.put
checkConfigMembers
beanDefinition.registerExternallyManagedConfigMember
AutowiredAnnotationBeanPostProcessor
findAutowiringMetadata
buildAutowiringMetadata
injectionMetadataCache.put
checkConfigMembers
ApplicationListenerDetector
PersistenceAnnotationBeanPostProcessor
addSingletonFactory
populateBean
populateBean
hasInstantiationAwareBeanPostProcessors
postProcessAfterInstantiation
autowireByName
unsatisfiedNonSimpleProperties
for -> propertyNames
containsBean(propertyName)
getBean
pvs.add(propertyName, bean);
registerDependentBean
autowireByType
unsatisfiedNonSimpleProperties
for -> propertyNames
containsBean(propertyName)
getBean
pvs.add(propertyName, bean);
registerDependentBean
hasInstantiationAwareBeanPostProcessors
mbd.getDependencyCheck
postProcessProperties
CommonAnnotationBeanPostProcessor
InjectionMetadata#inject
AutowiredAnnotationBeanPostProcessor
findAutowiringMetadata
InjectionMetadata#inject
AutowiredAnnotationBeanPostProcessor#inject<br>
resolvedCachedArgument<br>
resolveFieldValue
DefaultListableBeanFactory#resolveDependency
createOptionalDependency
DependencyObjectProvider
createDependencyProvider
doResolveDependency<br>
descriptor.resolveShortcut
resolveMultipleBeans
findAutowiringMetadata
resolveCandidate
beanFactory.getBean
applyPropertyValues
initializeBean
invokeAwareMethods
applyBeanPostProcessorsBeforeInitialization
invokeInitMethods
applyBeanPostProcessorsAfterInitialization
getObjectForBeanInstance<br>
BeanFactoryUtils.isFactoryDereference
getCachedObjectForFactoryBean
getObjectFromFactoryBean
getObjectFromFactoryBean
doGetObjectFromFactoryBean<br>
MyFactoryBean.getObject
beforeSingletonCreation
afterSingletonCreation
postProcessObjectFromFactoryBean
singletonObjects
DefaultListableBeanFactory#getBean(Class<T>)<br>
resolveBean
resolveNamedBean
getBeanNamesForType<br>
doGetBeanNamesForType
getBean
getParentBeanFactory