Spring(五)- Bean 实例化的基本流程

一、Bean 实例化的基本流程

Spring容器在进行初始化时,会将 xml 配置的 < bean>的信息封装成一个 BeanDefinition 对象,所有的 BeanDefinition 存储到一个名为 beanDefinitionMap 的 Map 集合中去, Spring 框架再对该 Map 进行遍历,使用反射创建 Bean 实例对象,创建好的 Bean 对象存储在一个名为 singletonObjects 的 Map 集合中,当调用 getBean 方法时则最终从该 Map 集合中取出 Bean 实例对象返回。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

BeanFactory默认的实现类是DefaultListableBeanFactory
在这里插入图片描述

DefaultListableBeanFactory对象内部维护着一个 beanDefinitionMap 用于存储封装好的 BeanDefinition,源码如下:

public class DefaultListableBeanFactory extends ... implements ...{
	// 存储 < bean> 标签对应的 BeanDefinition 对象
	// key:是Bean的 beanName,value:是Bean定义对象BeanDefinition
	private final Map<String, BeanDefinition> beanDefinitionMap;
}

Spring框架会取出 beanDefinitionMap 中的每个 BeanDefinition 信息,反射构造方法或调用指定的工厂方法生成 Bean 实例对象,所以只要将 BeanDefinition 注册到 beanDefinitionMap 这个 Map 中, Spring 就会进行对应的 Bean 的实例化操作

Bean实例及单例池 singletonObjects,beanDefinitionMap 中的 BeanDefinition 会被转化成对应的 Bean 实例对象,存储到单例池 singletonObjects 中去,在 DefaultListableBeanFactory 的上四级父类 DefaultSingletonBeanRegistry 中,维护着 singletonObjects ,源码如下:

public class DefaultSingletonBeanRegistry extends ... implements ...{
	// 存储 Bean 实例的单例池
	// key:是Bean的beanName,value:是Bean的实例对象
	private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);
}

小结:
1.加载 xml 配置文件,解析获取配置中的每个 < bean>的信息,封装成一个个的 BeanDefinition 对象;
2.将 BeanDefinition 存储在一个名为 beanDefinitionMap 的 Map< String,BeanDefinition> 中;
3.ApplicationContext 底层遍历 beanDefinitionMap ,创建 Bean 实例对象;
4.创建好的 Bean 实例对象,被存储到一个名为 singletonObjects 的 Map< String,Object> 中;
5.当执行 applicationContext.getBean(beanName)时,从 singletonObjects 去匹配 Bean 实例返回。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值