[TOC]
1、XML方式BeanDefination注册流程
1.1、测试demo
1 | java复制代码// 方法一,已过期 |
1.2、源码分析
1 | java复制代码【XmlBeanFactory】#构造方法 |
2、注解方式BeanDefination注册流程
2.1 测试代码
1 | java复制代码AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.spring.test.ioc.annotation.po"); |
2.2 源码分析
1 | java复制代码【AnnotationConfigApplicationContext】#构造方法 |
3、IOC容器启动核心流程(12步)
3.1 prepareRefresh刷新预处理
1 | java复制代码protected void prepareRefresh() { |
3.2 obtainFreshBeanFactory创建默认工厂
1 | java复制代码protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { |
3.3 prepareBeanFactory 配置预处理容器
1 | java复制代码// 配置这个工厂的标准环境,比如context的类加载器和后处理器 |
3.4 postProcessBeanFactory 重写自定义修改bean工厂方法
1 | java复制代码// 因为此方法的参数是BeanFactory,所以我们可以重写此方法,然后针对beanFactory进行一些修改。 |
3.5 invokeBeanFactoryPostProcessors BeanFactory处理器
1 | java复制代码protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory |
3.6 registerBeanPostProcessors 注册后置处理器
1 | java复制代码// 注册用来拦截bean创建的BeanPostProcessor bean.这个方法需要在所有的application bean初始化之前调、 |
3.7 initMessageSource 初始化消息源
1 | java复制代码// 初始化MessageSource接口的一个实现类。这个接口提供了消息处理功能。主要用于国际化/i18n。 |
3.8 initApplicationEventMulticaster 初始化应用事件广播器
1 | java复制代码// 为context初始化一个事件监听多路广播器(ApplicationEventMulticaster) |
3.9 onRefresh初始化特殊的Bean
1 | java复制代码// 在AbstractApplicationContext的子类中初始化其他特殊的bean。其实就是初始化ThemeSource接口的实例。 |
3.10 registerListeners 注册应用监听器
1 | java复制代码// 注册应用的监听器。就是注册实现了ApplicationListener接口的监听器bean,这些监听器是注册到 |
3.11 finishBeanFactoryInitialization 实例化非懒加载Bean
1 | java复制代码// 完成bean工厂的初始化工作。这一步非常复杂,也非常重要,涉及到了bean的创建。第二步中只是完成了 |
3.12 finishRefresh 完成刷新发布应用事件
1 | java复制代码// 完成context的刷新。主要是调用LifecycleProcessor的onRefresh()方法,并且发布事件 |
4、预告: 下一篇幅将对Spring Bean的实例化过程源码部分以及AOP容器的创建及调用流程做详细分析。
本文转载自: 掘金