更新于2020-10-01
从IoC的角度来说,spring是个容器,这个容器就是BeanFactory, 当然你说它是ApplicationContext也没有问题。容器是用来装东西的,装的东西就是我们定义的bean, 不过spring对它进行了封装,叫做BeanDefinition.
所以spring初始化的过程中,首先会做这么几件事情:
- 创建容器
- 创建beandefinition
- 向容器里注册beandefinition
Spring是容器,最基本的容器是BeanFactory, 然后ApplicationContext又继承自它,但其实不能认为ApplicationContext是BeanFactory的实现类,因为事实是ApplicationContext内部持有了一个实例化的BeanFactory(DefaultListableBeanFactory).
refresh方法是整个容器启动的核心。方法主要有以下几个功能:
obtainFreshBeanFactory(): 创建容器,加载注册Bean.
prepareBeanFactory(): 设置类加载器,添加BeanPostProcessor
finishBeanFactoryInitialization(beanFactory):初始化所有的Singleton Beans
BeanDefinition是Bean装载进容器中的一种表示,里面具体有是否是单例,它的依赖,是否懒加载,类名称,等等。