Spring实例化流程

Spring实例化流程:

源码中执行的是AbstractApplicationContext中的finishBeanFactoryInitialization方法进行实例化对象。

  1. 拿到将要实例化bean的BeanDefinition(拿到原料)
  2. 从单例池中尝试去拿这个bean的实例化对象。
  3. 如果拿不到,判断它是否标注了DependOn注解,如果标注了,就先去实例化DependOn里添加的bean
  4. 开始创建bean实体,如果有覆盖方法会先准备覆盖方法,实例化之前执行了InstantiationAwareBeanPostProcessor后置处理器的postProcessBeforeInstantiation方法,其实什么都没做,基本上都是返回空。
  5. 实例化对象,就是通过反射的方式,期间进行了各种适配,比如说使用哪些构造方法啊,有没有有参的构造方法呀,这样的。这一步之行了SmartInstantiationAwareBeanPostProcessor后置处理器
  6. 第三次执行MergedBeanDefinitionPostProcessor后置处理器
  7. 第四次执行SmartInstantiationAwareBeanPostProcessor后置处理器。为避免后期循环依赖,可以在bean初始化完成前将创建实例的ObjectFactory加入工厂对bean再一次依赖引用,主要应用SmartInstantiationAwareBeanPostProcesser其中我们所熟悉的AOP就是在这里将advice动态织入的,若没有直接返回bean不做任何处理
  8. 设置属性,非常重要,也就是自动装配执行了两次后置处理器第一次InstantiationAwareBeanPostProcessor,这个后置处理器一般返回为true,如果返回为false就表示不进行自动注入了。接下来又执行了一次InstantiationAwareBeanPostProcessor后置处理器的postProcessProperties方法进行自动注入。
  9. 初始化bean,invokeAwareMethods,首先会看是否实现了,Aware,BeanClassLoaderAware,BeanFactoryAware接口,如果实现和会注入相应的数据。比如说Aware对注入beanName,BeanClassLoaderAware会注入类加载器,BeanFactoryAware会注入工厂对象。
  10. 执行后置处理器BeanPostProcessor,我们可以在这里进行扩展和二次开发,只需要实现这个接口就行了。
  11. invokeInitMethods执行初始化方法还会执行实现了InitializingBean接口的方法。RequestMappingHandlerMapping就是在这里进行切入的。进行springmvc的一些配置。
  12. 在执行一次BeanPostProcessor后置处理器,执行postProcessAfterInitialization方法。
  13. 执行销毁方法。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值