<b>this()</b>
<b>调用用父类构造函数,初始化BeanFactory </b>
this.beanFactory = new DefaultListableBeanFactory();
<b>初始化Bean定义扫描器并注册内置PostProcessor</b>
<b>this.reader = new AnnotatedBeanDefinitionReader(this); </b>
用户处理条件表达式计算 @Condition
设置IOC容器ApplicationContext对象
设置Bean工厂对象
设置环境对象
设置资源加载对象
设置类加载器对象
注册一些配置的后置处理器<br>
<span style="font-size: inherit;">internalConfigurationAnnotationProcessor<br>ConfigurationAnnotationProcessor</span><br>
internalAutowiredAnnotationProcessor<br>AutowiredAnnotationBeanPostProcessor<br>
子主题
internalCommonAnnotationProcessor<br>CommonAnnotationBeanPostProcessor<br>
internalEventListenerFactory<br> DefaultEventListenerFactory<br>
internalEventListenerProcessor<br>EventListenerMethodProcessor<br>
internalRequiredAnnotationProcessor<br>RequiredAnnotationBeanPostProcessor<br>
<font color="#9e9e9e">AnnotationAwareOrderComparator</font>
<font color="#9e9e9e">ContextAnnotationAutowireCandidateResolver</font>
<b>初始化 classPath类型的 bean定义扫描器</b>
this.scanner = new ClassPathBeanDefinitionScanner(this);
<b>register(componentClasses)</b>
大致逻辑如
通过AnnotatedGenericBeanDefinition的构造方法,获得配置类的BeanDefinition
判断需不需要跳过注册,Spring中有一个@Condition注解,如果不满足条件,就会跳过这个类的注册
解析作用域,如果没有设置的话,默认为单例
获得BeanName
解析通用注解并填充到 AnnotatedGenericBeanDefinition-Lazy,Primary,DependsOn,Role,Description
限定符处理,不是特指@Qualifier注解,也有可能是Primary,或者是Lazy,或者是其他
把AnnotatedGenericBeanDefinition数据结构和beanName封装到一个对象中(方便传参)
注册,最终会调用 DefaultListableBeanFactory 中的 registerBeanDefinition() 方法
<b>refresh() 刷新容器<br></b>其实里面就13个方法<br>在后面进行分类解析<br>
<b>准备刷新上下文环境</b><br>prepareBeanFactory(beanFactory)<br>
<b>告诉子类初始化Bean工厂(MVC),获取Bean工厂</b><br>ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()<br>
<b>对Bean工厂进行填充属性<br></b>prepareBeanFactory(beanFactory)<br>
<b>空方法,留给子类实现<br></b>postProcessBeanFactory(beanFactory)<br>
<b>调用Bean工厂的后置处理器(内置+自定义)</b><br>该方法去还会实例化几个内置bean<br><b><font color="#f44336">invokeBeanFactoryPostProcessors(beanFactory)</font></b><br>
<b>流程图</b>
<b>注册Bean的后置处理器</b><br>registerBeanPostProcessors(beanFactory)<br>
beanFactory.addBeanPostProcessor(postProcessor)
<b>ApplicationContextAwareProcessor</b>
ApplicationListenerDetector
invokeBeanFactoryPostProcessors
AutowireAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
初始化国际资源<br>initMessageSource()<br>
<b>蓝色部分</b><br><b><font color="#f44336">监听器SpringListeners</font></b><br>
<b>创建事件多播器</b><br>initApplicationEventMulticaster()<br>
<b>空方法,留给子类实现</b><br>onRefresh()<br>
<b>将事件监听器注册到多播器上</b><br>registerListeners()<br>
<b><font color="#ff9800">实例化懒加载单例Bean的<br></font><font color="#f44336">Bean的创建过程(生命周期)</font></b><br>finishBeanFactoryInitialization(beanFactory)<br>
<b>冻结所有BeanDefinition,初始化非懒加载单例Bean</b><br>beanFactory.freezeConfiguration()<br>beanFactory.preInstantiateSingletons();<br>
getBean() =><br>doGetBean() =><br>createBean() =><br><b><font color="#f44336">doCreateBean()</font></b><br>
<b>实例化</b><br>createBeanInstance()<br>
<b>实现赋值</b><br>populateBean()<br>
<b>初始化<br></b>initializeBean()<br>
<b>加入单例池</b><br>addSingletonFactory()<br>
容器刷新 <br>finishRefresh()<br>
清除元数据缓冲<br> resetCommonCaches()