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 EventListenerMethodProcessor2.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();发布一些生命周期的事件等等



