查看我的其他Spring源码分析文章
https://blog.csdn.net/caicongyang/category_2139981.html?spm=1001.2014.3001.5482
1. this() 方法
a.构建DefaultListableBeanFactory、AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner
b. 在构建AnnotatedBeanDefinitionReader过程中往BeanDefinitionRegistry提前注册相关的BeanFactoryProcess
源码见org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors(org.springframework.beans.factory.support.BeanDefinitionRegistry, java.lang.Object)
提前往里注册BeanDefinition:
ConfigurationClassPostProcessor AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor PersistenceAnnotationBeanPostProcessor internalPersistenceAnnotationProcessor DefaultEventListenerFactory EventListenerMethodProcessor
2.register(componentClasses)方法
往BeanDefinitionRegistry注册配置类
3.refresh() 方法
a.prepareRefresh(): 启动时间等,设置配置信息到Environment中
b.obtainFreshBeanFactory(): 判断是否刷新容器等额
c.prepareBeanFactory(beanFactory):
提完往beanfactory里添加ApplicationContextAwareProcessor/ApplicationListenerDetector两个bean
添加resolvableDependencies:在byType进行依赖注入时,会先从这个属性中根据类型 找bean
简单理解为提前先注入这个bean;
// BeanFactory interface not registered as resolvable type in a plain factory.
// MessageSource registered (and found for autowiring) as a bean.
beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
beanFactory.registerResolvableDependency(ResourceLoader.class, this);
beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
beanFactory.registerResolvableDependency(ApplicationContext.class, this);
d.invokeBeanFactoryPostProcessors(beanFactory) 方法
执行BeanFactoryPostProcessor,重点是前面放进去的ConfigurationClassPostProcessor这个beanFactoryPostProcessor去递归解析包含@Component @Bean @Import @ImportSource类的解析,扫描生生产所有的BeanDefinition;
核心类是:
org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions
e.registerBeanPostProcessors(beanFactory)方法
将扫描到的BeanPostProcessors实例化并排序,并添加到BeanFactory的beanPostProcessors属性中去
f.initMessageSource()方法
设置ApplicationContext的MessageSource,
g.initApplicationEventMulticaster();
发布广播
h.registerListeners();
注册监听器
i.finishBeanFactoryInitialization(beanFactory);
初始化单例方法
j.finishRefresh();
发布一些生命周期的事件等等