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