获取 Spring bean 的主要流程如下:
XmlBeanFactory 可以说是 Spring 中一个最简单的 BeanFactory,通过它可以了解 Spring 的设计思路。
当调用 BeanFactory.getBean 方法获取 Bean 时,如果 Bean 还未创建,则会触发 Bean 的创建,本文主要关注 Bean 的创建过程。
BeanDefinitionRegistry 是一个接口,从名字上就可以看出来,它是一个管理 BeanDefinition 的注册中心。通常情况下,BeanFactory 的具体实现类也会实现该接口,用于管理 AbstractBeanDefinition 继承结构下的 BeanDefinition 实例,例如 RootBeanDefinition 和 ChildBeanDefinition 实例。
AbstractApplicationContext
是 ApplicationContext
的一个抽象实现类。和普通的 BeanFactory
不同的是,ApplicationContext
可以检测到它的内部 BeanFactory
中定义的特殊 Bean:自动完成 BeanFactoryPostProcessor
、BeanPostProcessor
、ApplicationListener
的注册。
Spring 中定义了一个 Aware 接口,用于表示一个 bean 可以通过回调的方式接收 Spring 容器的通知。该接口并未定义具体的方法,而是交给子类决定,通常只包含一个只接收单个入参并且返回结果为 void 的方法。