Spring源码分析【4】-Spring扫描basePackages注解

org.springframework.beans.factory.support.DefaultListableBeanFactory

重要数据结构

/** Map of bean definition objects, keyed by bean name */
	private final Map beanDefinitionMap = new ConcurrentHashMap(256);


RootConfig 代码

@Configuration
@Import(MybatisConfig.class)
@ComponentScan(basePackages = {"com.xxx.*"},
        excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
public class RootConfig {
}


org.springframework.context.annotation. ComponentScanAnnotationParser.parse
Spring源码分析【4】-Spring扫描basePackages注解_第1张图片


org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan

Spring源码分析【4】-Spring扫描basePackages注解_第2张图片


org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents

Spring源码分析【4】-Spring扫描basePackages注解_第3张图片


org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.resolveBasePackage

Spring源码分析【4】-Spring扫描basePackages注解_第4张图片

org.springframework.util.ClassUtils.convertClassNameToResourcePath

Spring源码分析【4】-Spring扫描basePackages注解_第5张图片

getResources

Spring源码分析【4】-Spring扫描basePackages注解_第6张图片

getResources

Spring源码分析【4】-Spring扫描basePackages注解_第7张图片


findPathMatchingResources

Spring源码分析【4】-Spring扫描basePackages注解_第8张图片

determineRootDir

Spring源码分析【4】-Spring扫描basePackages注解_第9张图片

回到findPathMatchingResources

Spring源码分析【4】-Spring扫描basePackages注解_第10张图片

findPathMatchingResources的result

Spring源码分析【4】-Spring扫描basePackages注解_第11张图片


一直退回到findCandidateComponents

Spring源码分析【4】-Spring扫描basePackages注解_第12张图片

MetadataReader metadataReader = this.metadataReaderFactory.getMetadataReader(resource);

Spring源码分析【4】-Spring扫描basePackages注解_第13张图片

MetadataReader

Spring源码分析【4】-Spring扫描basePackages注解_第14张图片

if (isCandidateComponent(metadataReader))

Spring源码分析【4】-Spring扫描basePackages注解_第15张图片


ScannedGenericBeanDefinition

Spring源码分析【4】-Spring扫描basePackages注解_第16张图片


回到findCandidateComponents

Spring源码分析【4】-Spring扫描basePackages注解_第17张图片


return candidates;

Spring源码分析【4】-Spring扫描basePackages注解_第18张图片


返回doScan

Spring源码分析【4】-Spring扫描basePackages注解_第19张图片


checkCandidate

Spring源码分析【4】-Spring扫描basePackages注解_第20张图片


回doScan

Spring源码分析【4】-Spring扫描basePackages注解_第21张图片


BeanDefinitionHolder

Spring源码分析【4】-Spring扫描basePackages注解_第22张图片

beanDefinitions.add(definitionHolder);

Spring源码分析【4】-Spring扫描basePackages注解_第23张图片


registerBeanDefinition

Spring源码分析【4】-Spring扫描basePackages注解_第24张图片


registerBeanDefinition

Spring源码分析【4】-Spring扫描basePackages注解_第25张图片


oldBeanDefinition = this.beanDefinitionMap.get(beanName);

Spring源码分析【4】-Spring扫描basePackages注解_第26张图片


if (hasBeanCreationStarted()) 

Spring源码分析【4】-Spring扫描basePackages注解_第27张图片


this.beanDefinitionMap.put(beanName, beanDefinition);

Spring源码分析【4】-Spring扫描basePackages注解_第28张图片


updatedDefinitions

Spring源码分析【4】-Spring扫描basePackages注解_第29张图片


doScan return beanDefinitions;

Spring源码分析【4】-Spring扫描basePackages注解_第30张图片


org.springframework.context.annotation.ComponentScanAnnotationParser.parse

Spring源码分析【4】-Spring扫描basePackages注解_第31张图片


org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass

Spring源码分析【4】-Spring扫描basePackages注解_第32张图片


Spring源码分析【4】-Spring扫描basePackages注解_第33张图片


parse

Spring源码分析【4】-Spring扫描basePackages注解_第34张图片


org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass

Spring源码分析【4】-Spring扫描basePackages注解_第35张图片

this.configurationClasses.put(configClass, configClass);

Spring源码分析【4】-Spring扫描basePackages注解_第36张图片


回到doProcessConfigurationClass

Spring源码分析【4】-Spring扫描basePackages注解_第37张图片


for (SourceClass ifc : sourceClass.getInterfaces()) {

Spring源码分析【4】-Spring扫描basePackages注解_第38张图片


doProcessConfigurationClass

// No superclass -> processing is complete

return null;

Spring源码分析【4】-Spring扫描basePackages注解_第39张图片


processConfigurationClass

Spring源码分析【4】-Spring扫描basePackages注解_第40张图片


org.springframework.context.annotation.ConfigurationClassParser.parse



parse

Spring源码分析【4】-Spring扫描basePackages注解_第41张图片


org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions

Spring源码分析【4】-Spring扫描basePackages注解_第42张图片


alreadyParsed.addAll(configClasses);

Spring源码分析【4】-Spring扫描basePackages注解_第43张图片


alreadyParsedClasses

Spring源码分析【4】-Spring扫描basePackages注解_第44张图片

Spring源码分析【4】-Spring扫描basePackages注解_第45张图片


invokeBeanDefinitionRegistryPostProcessors

Spring源码分析【4】-Spring扫描basePackages注解_第46张图片


org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors

Spring源码分析【4】-Spring扫描basePackages注解_第47张图片


// Now, invoke the postProcessBeanFactory callback of all processors handled so far.
			invokeBeanFactoryPostProcessors(registryPostProcessors, beanFactory);
			invokeBeanFactoryPostProcessors(regularPostProcessors, beanFactory);

Spring源码分析【4】-Spring扫描basePackages注解_第48张图片


postProcessorNames

Spring源码分析【4】-Spring扫描basePackages注解_第49张图片


refresh

Spring源码分析【4】-Spring扫描basePackages注解_第50张图片

你可能感兴趣的:(Spring)