【面试】spring中ioc加载过程

一.加载过程

1.概念态–>定义态
  • 1.实例化一个ApplicationContext的对象
  • 2.调用bean工厂后置处理器(invokeBeanFactoryPostProcessors)完成扫描(如果类上有@Component注解)
  • 3. 循环解析扫描出来的类信息
  • 4.实例化一个BeanDefinition对象来存储解析出来的bean信息
  • 5.把实例化好的beanDefinition对象统一存入BeanDefinitionMap以便之后实例化bean
  • 6.再次调用其它bean工厂后置处理器
2.定义态–>纯净态
  • 1.实例化之前spring要做验证,需要遍历BeanDefinitionMap,依次判断beanDefinition是否Lazy懒加载,是否prototype单多例,是否abstract抽象等等。还有国际化、注册BeanPostProcessor等等。调用finishBeanFactoryInitialization方法来实例化单例的Bean
  • 2.验证完成后,spring在实例化一个bean之前要判断类的构造方法,spring实例化对象是通过构造方法反射实现的,需要知道是哪个构造方法
  • 3. spring调用构造方法反射实例化出一个对象,该对象不是个完整的bean(需要注入属性、或者需要代理等等)
3.纯净态–>成熟态
  • 1.spring处理合并后的beanDefinition
  • 2.判断是否需要完成属性注入(DI),如果需要完成属性注入则开始注入属性
4.初始化
  • 1.判断bean的类型回调Aware接口
  • 2.调用生命周期回调方法
  • 3. 如果需要代理(aop),则完成代理
5.创建完成
  • 1.将bean放入单例池singletonObjects,bean完成后存到spring容器中。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值