Spring IOC原理解读:

Spring IOC原理解读:

BeanFactory(管理bean的源头或入口, 核心类:DefaultListableBeanFactory)
BeanDefinition(bean的定义信息,将xml转为java信息,每个对象都包含了bean配置的属性信息)
BeanRegistry(创建bean的地方,类:DefaultSingletonBeanRegistry, 方法:beforeSingletonCreation(beanName))

一、加载容器:beanFactory, applicationContext
1、当new FileSystemXmlApplicationContext的时候,会执行refresh方法。
   通过在父级类中AbstractApplicationContext 创建BeanFactory对象
2、然后加载beanDefinition:通过resource加载xml的一些配置文件转化为java对象格式进行管理。

二、初始化及依赖注入:

AbstractApplicationContext在容器加载后,会去实例化所有非延迟加载的单例Bean。在DefaultListableBeanFactory中初始化存于他的list中的beanName,一个个初始化。具体bean的创建步骤:
1、先从DefaultSingletonBeanRegestry中获取bean(先从一级缓存singletonObject中获取,如没有从earlySingletonObject获取,如  没有就从singletonFactory获取如取到就将singtonFactory数据移除,放入到earlySingletonObject)。
2、 当从父级BeanFactory的map中获取到对象时就返回,如果获取不了,则顺着双亲BeanFactory链一直向上找,如果能找到,则返回,还是找不到,就创建,具体创建步骤如下图。

对Bean的创建最为核心三个方法解释如下:

  • createBeanInstance:实例化,其实也就是调用对象的构造方法实例化对象
  • populateBean:填充属性,这一步主要是对bean的依赖属性进行注入(@Autowired)
  • initializeBean:执行init-method、InitializingBean, PostBeanProcessor的前置后置处理,注册bean销毁的回调接口。

      内部通过AccessController.doPrivileged生成一个Constructor,然后Constructor.newInstance创建了对象。

下图即为创建bean的过程,也采用了三级缓存解决了循环依赖。(DefaultSingletonBeanRegistry#getSingleton)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值