码迷,mamicode.com
首页 > 编程语言 > 详细

spring-容器工厂实例化流程(一)

时间:2017-10-31 22:19:03      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:通过   获取   检查   default   直接   anr   abs   objects   曝光   

1.Source

spring 初始化最先获得熟悉资源如url,url,file,

2.beanDefinition

通过解析source文件获得BeanDefinition,其中根节点的对象是RootBeanDefinition。

3.AbstractBeanFactory

1.获得RootBeanDefinition后通过AbstractBeanFactory实例化文件
2.解析RootBeanDefinition的属性时,需要使用到PropertyEditor属性编辑器。
3.getBean方法
4.先通过name获得BeanName
5.然后检查singleton是否有bean实例已经生成
  ● DefaultSingletonBeanRegistry 实例化singletonbean的工厂
  ● 先从singletonObjects中查找是否有已经实例化的bean有则返回
  ● 没有在加载则查看是否正在加载中。
  ● 如果是正在加载中,则看是否已经提前曝光
  ● 如果没有提前曝光,则判定是否可以提前曝光
  ● 如果可以提前曝光则去获取当前beanName的factory。
  ● 如果factory存在则提前曝光当前bean,然后移除这个工厂。
6.如果检查有实例返回
  ● 则检查是不是factoryBean
  ● 如果是普通bean实例则直接返回对象
  ● 如果是factoryBean, 则去查找当前eanName的RootBeanDefinition,获取synthetic属性后去创建实例
  ● 如果创建的是单列
  ● 先从缓存获取当前实例。
      ○ 如果没有缓存则直接获取factoryBean.getObject()
      ○ 返回实例    
7.如果没有实例返回
  ● 如果是在一个循环引用中又引用到了自己,则抛出异常
  ● 检查是否有parentBeanFactory,如果有而且也包含beanName的BeanDefinition 则在parentBeanFactory中获得实例
  ● 如果没有parentBeanFactory,则依次判定是否是singleton,prototype,scope;
  ● 根据类型创建完实例以后,再检查创建的实例是否和要创建的类有区别。
  ● 最后返回bean实例。

spring-容器工厂实例化流程(一)

标签:通过   获取   检查   default   直接   anr   abs   objects   曝光   

原文地址:http://www.cnblogs.com/a337928/p/7763920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!