spring-beans模块分析

描述:spring-beans负责实现Spring框架的IOC模块

UML结构图如下:

在这里插入图片描述

AbstractBeanFactory:BeanFactory接口的抽象实现类,提供了ConfigurableBeanFactory 完整SPI。
通过DefaultSingletonBeanRegistry实现了单例缓存(singleton cache).
实现了通过FactoryBean判断bean类型(singleton/prototype)功能,处理,别名和合并bean definition功能,创建,获取和销毁bean对象功能,内部引用了parentBeanFactory对象,实现了BeanFactory的双亲委派结构

核心方法:

1.createBean

整体流程如下:
在这里插入图片描述
resloveBeanClass具体实现:返回RootBeanDefinition对象的beanClass属性或者其他的classloader根据RootBeanDefinition对象的beanClassName属性解析出的Class<?>

resloveBeforeInstantiation具体实现:遍历beanFactory对象的beanPostProcessors列表两次,对当前bean分别递归调用beanPostProcessor接口的postProcessBeforeInstantiation(转化为InstantiationAwareBeanPostProcessor类型)和 postProcessAfterInitialization方法(上一次接口调用的返回值作为下一次接口调用的请求)

doCreateBean具体实现:
在这里插入图片描述
createBeanInstance具体实现如下:

1.如果RootBeanDefinition对象定义了instanceSupplier属性,返回instanceSupplier.get()

2.如果RootBeanDefinition对象的factoryMethodName属性不为空,返回通过factoryMethod方法构造的实例

3.如果RootBeanDefinition对象的resolvedConstructorOrFactoryMethod属性不为空,返回通过特定方式构造的实例

4.遍历beanPostProcessor(转化为SmartInstantiationAwareBeanPostProcessor)列表,使用determineCandidateConstructors(beanClass, beanName)获取特定构造器,返回特定构造器返回的实例

5.返回无参构造器

AbstractApplicationContext:org.springframework.context.ApplicationContext接口的抽象实现,用于创建或者刷新IOC容器

核心方法:

1.refresh

创建或者刷新IOC容器

执行流程如下:
在这里插入图片描述
1.1 prepareBeanFactory详解

流程如下:
在这里插入图片描述
1.2 invokeBeanFactoryPostProcessors详解

流程如下:
在这里插入图片描述
备注:如果beanFactory是BeanDefinitionRegistry类型的话,在beanFactoryPostProcessors和beanFactory查找BeanDefinitionRegistryPostProcessor类型,并执行相应方法

1.3 登记ApplicationListener对象

ApplicationListener类型UML结构图如下:
在这里插入图片描述
1.4 初始化BeanFactory中定义的singleton对象

AbstractRefreshableApplicationContext:默认使用DefaultListableBeanFactory类型

AbstractRefreshableWebApplicationContext:面向web环境的ApplicationContext,主要涉及到ServletContext和ServletConfig

ServletContextAwareProcessor:

备注:将bean转换为ServletContextAware类型,并设置对应ServletContext和ServletConfig参数

XmlWebApplicationContext:使用xml配置加载bean对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值