spring ioc 加载过程

IOC

BeanFactory生命流程

  • BeanFactory 加载Bean 配置文件 ,将读取到的Bean 配置封装成一个对象 BeanDefinition 对象
  • 将封装好的对象 注册到 BeanDefinition 容器中
  • 注册 BeanPostProcessor 相关实现类到 BeanPostProcessor 容器中
  • BeanFactory 进入就绪状态
  • 外部调用 BeanFactory 的 getBean(String name) 方法,BeanFactory 着手实例化相应的 bean
  • 重复步骤 3 和 4,直至程序退出,BeanFactory 被销毁

BeanDefinition介绍

BeanDefinition 的作用就是储存xml中每一个bean中的信息,其中里面property 是被

PropertyValue 存储的 ref 是被 BeanReference存储的

XML 解析

BeanFactory 初始化的时候,会根据传入的xml 配置文件路径加载并解析配置文件,但是加载配置文件的过程是交给BeanDefinitionReader 的实现XmlBeanDefinitionReader 去做 XmlBeanDefinitionReader 做的是以下几件事:

  • 将xml配置文件加载至内存
  • 获取根标签下的所有 标签
  • 遍历标签列表,并从标签读取id class 属性保存到BeanDefinition 对象中
  • 遍历标签下 标签,从中读取属性值并保存到PropertyValue中
  • 将<id,BeanDefinition> 键值对缓存在Map中,留作后用
  • 重复3,4,5,6 步,直到解析结束

注册BeanPostProcessor

BeanPostProcessor 接口是spring对外拓展的接口之一,其主要用途提供一个机会,让开发人员能够插手bean的实例化过程。通过实现这个接口,我们就可以在bean实例化时,对bean进行一些处理,比如,,我们所熟悉的AOP就是在这里将切面逻辑织入相关bean 中的 正是因为有了BeanPostProcessor 接口作为桥梁才能够使得IOC和AOP产生联系。

XmlBeanDefinitionReader 在解析工作完成之后,BeanFaction会将他解析的<id,BeanDefinition> 键值对注册到自己的beanDefinitionMap中。BeanFactory 注册号beanDefinition 后就开始注册BeanPostProcessor 相关的实现类

  • 根据BeanDefinition 记录的信息,寻找所有实现了BeanPostProcessor 接口的类
  • 实例化BeanPostProcessor 接口的实现类
  • 将实例好的对象放入到List 中
  • 重复2,3步 直至将所有实现类完成注册

getBean过程解析

在完成xml的解析,BeanDefinition 的注册以及BeanPostProcessor 的注册过程后。BeanFactory的初始化工作基本结束 此时BeanFactory处于就绪状态,等待外部调用。外部程序一般都是通过BeanFactory 中的getBean(String name) 方法来获取容器中的bean BeanFactory 具有延迟初始化bean的特性 ,也就是等待外部程序调用的时候,才实例化相关的bean 这样做的好处是:

  • 提高了BeanFactory的初始化速度
  • 节省了内存资源

接下来就是Bean的实例化过程

  • 实例化bean对象
  • 设置对象属性
  • 检查Aware 相关接口并设置相关依赖
  • BeanPostProcessor前置处理
  • 检查是否是 InitializingBean 以决定是否调用afterPropertiesSet方法
  • 检查是否配置了自定义的init-method
  • BeanPostProcessor后置处理
  • 注册必要的Destruction 相关回调接口 、
  • 使用中。。。
  • 是否实现DisposableBean接口
  • 是否配置了自定义destroy方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值