Spring IoC作用是管理Bean的生命周期并提供用户使用bean,所以我们有必要来看看Spring如何管理这些Bean的,前面我们提到IoC基本功能由BeanFactory系列类型实现,BeanFactory系列中就是DefaultListableBeanFactory这个类型完成的BeanFactory的基本功能。先来看下继承体系:
Spring Boot在启动时,从大体流程上,我们应该可以预料到,肯定是ApplicationContext先被构造,然后才是BeanFactory被构造,因为是ApplicationContext聚合了BeanFactory。在ApplicationContext初始化的时候,往BeanFactory中装载bean。这是我们猜测的流程。
二、DefaultListableBeanFactory被谁持有
直接给出结论,是这2个ApplicationContext的子类
org.springframework.context.support.AbstractRefreshableApplicationContext
org.springframework.context.support.GenericApplicationContext
application context会在初始化的时候,往bean factory中装载所有bean。
三、DefaultListableBeanFactory
org.springframework.beans.factory.support.DefaultListableBeanFactory
它在support包下面,listable的意思是能够枚举出BeanFactory中所有实例的相关信息。这是个基本且重要的能力,几乎是容器的主要能力,所以,DefaultListableBeanFactory是BeanFactory的主要能力实现者。在ApplicationContext的refresh方法中,应该会往这里存入所有实例。
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {
}