• 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  后的自我总结。不对之处,望不吝赐教!
  • 相关阅读:
    把一列数据分割成两列
    数据校验,轴的概念
    叠加折线图
    饼图
    柱状图、水平柱状图
    柱状图
    数据筛选过滤
    余数
    输出进度条
    生成器-文件内容
  • 原文地址:https://www.cnblogs.com/dengding/p/7390531.html
Copyright © 2020-2023  润新知