• Spring bean的加载


    Spring 通过反射来实例化Bean


    bean的加载流程:

    1. 转化对应的beanName:去除对FactoryBean的修饰符(去除“&”)

    2. 尝试从缓存中加载单例(map中)

    3. bean的实例化(之前获取到的bean是最原始的bean状态;如果bean继承FactroyBean,需要返回的并不是这个类对象,而是getObject()中的实例。ps:如果真的是想获取到工厂,那么传入的beanName前应该添加“&”)

    4. 寻找依赖(在初始化一个bean时,首先会初始化这个bean所对应的依赖)

      1. 循环依赖:两个或多个bean相互持有对方
      2. spring解决循环依赖(只有单例才有可能解决循环依赖):
        1. 构造器注入的循环依赖:抛出异常(BeanCurrentlyInCreatioinException)
        2. setter注入的循环依赖:通过提前暴露单例工厂从而使其他bean能引用到该bean
        3. 非单例的循环依赖:spring无法支持,抛出异常(BeanCurrentlyInCreatioinException)
    5. 针对不同scope进行bean的创建: image

      1. 创建一个对象
      2. 如果是单例,暴露objectFactory
      3. 属性填充
      4. 是否实现Aware(获取相应的资源)
      5. BeanPostProcessor前置处理(后两条是对单个bean进行的处理,此部可以处理所有的bean)
      6. 是否实现InitializingBean,调用afterPropertiesSet方法
      7. 是否配置init-method
      8. BeanPostProcessor后置处理
      9. 是否实现DisposableBean
      10. 是否配置destroy-method
        文章为参考:《Spring源码深度解析》、http://www.cnblogs.com/xrq730/p/5721366.html  后的自我总结。不对之处,望不吝赐教!
  • 相关阅读:
    单词统计
    团队项目介绍--“益青春APP”
    团队项目 NABCD介绍
    兰猪耳
    薄雪万年草
    佛甲草
    针叶天蓝绣球
    白芨
    萱草
    吉祥草
  • 原文地址:https://www.cnblogs.com/dengding/p/7390531.html
Copyright © 2020-2023  润新知