Spring框架系列之bean的生命周期底层原理05

本文深入探讨Spring bean的生命周期,从AnnotationConfigApplicationContext的继承结构开始,详细介绍了DefaultListableBeanFactory作为BeanFactory的核心,以及其在Bean生命周期管理中的角色。内容涉及SingletonBeanRegistry、BeanFactory、ConfigurableListableBeanFactory等接口,以及它们各自的能力和实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们把Spring是如何扫描得到BeanDefinition的整个过程应该算是讲清楚了,如果对这个过程还有不了解的,不妨多看几遍,如果还是有问题,欢迎在评论区和笔者交流。从这章节开始我们开始分析下bean的生命周期的底层原理。

在开始生命周期的底层原理分析之前,有必要先把BeanFactory的整个继承结构讲下。我们先来看看
AnnotationConfigApplicationContext的继承结构,如下图:

从上图可以看出,
AnnotationConfigApplicationContext是GenericApplicationContext的子类,所以在构造AnnotationConfigApplicationContext之前会首先执行GenericApplicationContext的默认构造函数:

public GenericApplicationContext() {
   this.beanFactory = new DefaultListableBeanFactory();
}

GenericApplicationContext的默认构造函数中,创建了
DefaultListableBeanFactory的实例对象,这个就是咱们的核心BeanFactory类,来看看它的继承结构图:

我们知道每个接口就是定义具体的能力,而这里
DefaultListableBeanFactory则是BeanFactory能力的集大成者,我们来细数下每个接口的具体能力:

SingletonBeanRegistry

很明显,该接口定义了单例bean实例注册的相关操作。而
DefaultSingletonBeanRegistry则是该接口的默认实现类,FactoryBeanRegistrySupport则是在支持FactoryBean实例注册的实现类,它除了继承了DefaultSingletonBeanRegistry的能力,还专门对FactoryBean这种特殊Bean进行了处理。

BeanFactory

BeanFactory是Bean工厂的跟接口,用于访问SpringBean容器的根接口。其子接口HierarchicalBeanFactory定义了允许以可配置方式设置父级的bean工厂的相应方法,看它定义的方法:

BeanFactory getParentBeanFactory();

就知道它是提供父子BeanFactory能力的,而ListableBeanFactory则是一个主要的BeanFactory接口,它定义了获取Bean的方式。
ConfigurableListableBeanFactory则是继承了这两者的能力。

ConfigurableBeanFactory则是HierarchicalBeanFactory和SingletonBeanRegistry的子接口,当然拥继承了两者的能力;

AbstractBeanFactory是
FactoryBeanRegistrySupport和ConfigurableBeanFactory接口的实现类,不过它是抽象类,它里面定义了很多具体的后去bean的实现方式,如getBean。


AbstractAutowireCapableBeanFactory继承了AutowireCapableBeanFactory,他们定义了依赖注入的方式,如下:

int AUTOWIRE_NO = 0; //默认值,未激活Autowiring,需要手动指定依赖注入对象\
int AUTOWIRE_BY_NAME = 1;//根据被注入属性的名称作为Bean名称进行依赖查找,并将对象设置到该属性
int AUTOWIRE_BY_TYPE = 2;//根据被注入属性的类型作为Bean类型进行依赖查找,并将对象设置到该属性
int AUTOWIRE_CONSTRUCTOR = 3;//特殊的byType,用于构造器参数

BeanDefinitionRegistory

这个则是注册BeanDefinition的接口,这块也是我们在前面几个章节的扫描原理中已经介绍。


DefaultListableBeanFactory则是继承了AbstractAutowireCapableBeanFactory,并实现了ConfigurableListableBeanFactory、BeanDefinitionRegistry接口,所以我们说DefaultListableBeanFactory是Bean工厂的集大成者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值