spring源码深度解析
2022-07-02 15:31:02 0 举报
AI智能生成
spring源码深度解析
作者其他创作
大纲/内容
new AnnotationConfigApplicationContext(MainConfig.class)
this()
AnnotatedBeanDefinitionReader(this)
registerAnnotationConfigProcessors
unwrapDefaultListableBeanFactory
registerPostProcessor
setRole()
registry.registerBeanDefinition(beanName, definition);
this.beanFactory.registerBeanDefinition(beanName, beanDefinition);
validate()
return new BeanDefinitionHolder(definition, beanName);
ClassPathBeanDefinitionScanner(this)
register(Class<?>)
this.reader.register
registerBean(componentClass)
doRegisterBean
AnnotatedGenericBeanDefinition(beanClass)
processCommonDefinitionAnnotations
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry)
大致流程
reflash()
prepareRefresh
this.startupDate = System.currentTimeMillis();
this.closed.set(false);
this.active.set(true);
initPropertySources();
getEnvironment().validateRequiredProperties();
obtainFreshBeanFactory();
refreshBeanFactory()
getBeanFactory()
prepareBeanFactory(beanFactory);
postProcessBeanFactory(beanFactory);
invokeBeanFactoryPostProcessors(beanFactory);
invokeBeanFactoryPostProcessors(beanFactory)
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())
registerBeanPostProcessors(beanFactory);
initMessageSource();
initApplicationEventMulticaster();
onRefresh();
registerListeners();
finishBeanFactoryInitialization(beanFactory);
AbstractApplicationContext
AbstractApplicationContext
beanFactory.preInstantiateSingletons();
DefaultListableBeanFactoy
DefaultListableBeanFactoy
getBean
AbstractBeanFactory
AbstractBeanFactory
doGetBean
AbstractBeanFactory
AbstractBeanFactory
存在需要的bean
单例缓存池中不存在(正常我们自己创建的都走这里)
createBean
AbstractAutoWiredCapableBeanFactory
AbstractAutoWiredCapableBeanFactory
doCreateBean
AbstractAutoWiredCapableBeanFactory
AbstractAutoWiredCapableBeanFactory
createBeanInstance
AbstractAutoWiredCapableBeanFactory
AbstractAutoWiredCapableBeanFactory
autowireConstructor
instantiateBean
getInstantiationStrategy().instantiate
BeanUtils.instantiateClass
addSingletonFactory
populateBean
AbstractAutoWiredCapableBeanFactory
AbstractAutoWiredCapableBeanFactory
PropertyValues pvsToUse = bp.postProcessProperties(pvs, bw.getWrappedInstance(), beanName);
postProcessProperties
AutowiredAnnotationBeanPostProcessor
AutowiredAnnotationBeanPostProcessor
1、查找关联的元数据(也就是需要注入的元数据)
findAutowiringMetadata
findAutowiringMetadata
2、metadata.inject(bean, beanName, pvs);
InjectionMetadata
InjectionMetadata
element.inject(target, beanName, pvs);
AutowiredAnnotationBeanPostProcessor
AutowiredAnnotationBeanPostProcessor
resolveFieldValue(field, bean, beanName);
AutowiredAnnotationBeanPostProcessor
AutowiredAnnotationBeanPostProcessor
resolveDependency
DefaultListableBeanFactory
DefaultListableBeanFactory
doResolveDependency
DefaultListableBeanFactory
DefaultListableBeanFactory
findAutowireCandidates
descriptor.resolveCandidate(autowiredBeanName, type, this);
getBean
AbstractBeanFactory
AbstractBeanFactory
doGetBean
AbstractBeanFactory
AbstractBeanFactory
ReflectionUtils.makeAccessible(field);
field.set(bean, value);
field.set(bean, value);
finishRefresh();
收藏
0 条评论
下一页