Spring中Bean的加载流程(文字叙述)

4 篇文章 0 订阅

bean的 加载流程 (文字叙述)

Spring中Bean的加载流程
1. 转换对应的beanname , 因为传入的参数name 可能是别名,可能是FactoryBean ,解析内容包括 去除FactoryBean 的 &,
  取到alias 对应的beanName(最终版——真爱,不是中间的那些狐狸精)
2. 尝试从缓存中加载单例,如果失败则尝试从singletonFactories中加载, 因为在创建bean的时候会存在依赖注入的情况
 而在创建依赖的时候为了避免循环依赖,在Spring中创建bean的时候,不等笨啊创建完成就会将创建bean的ObjectFactory
 提早曝光加入缓存中,一旦下一个bean创建的时候小依赖上一个bean则直接使用ObjectFactory。
3. bean 实例化
 缓存中记录的只是最原始的bean状态,并不一定是我们最终需要的产品(期间可能需要进行逻辑处理)
4. 原型模式的依赖检查
 只有单例情况下才会去尝试解决循环依赖。因为是单例啊,一个容器,只有一个bean。
5. 检测parentFactory
 如果缓存中没有数据直接转到父类工厂上加载(如果有父类工厂的话)
6. 将存储XML配置文件的GernericBeanDefinition 转换为RootBeanDefinition, 不要理解为强制类型转换,兄弟层面的类
 怎么可以进行强制类型转换呢!
 关于为什么要进行转换的问题。浅显看来,GenericBeanDefinition里面多是继承了AbstractBeanDefinition的逻辑,没
 有什么自定义的逻辑存在,甚至可以看成是AbstractBeanDefinition的实现类,而RootBeanDefinition里面有着大量处理逻辑。
7. 寻找依赖
 在bean的初始化过程中很可能会用到某些属性,而某些属性很可能是动态配置的,并且配置成依赖于其他的bean, 那么这
 个时候就要先加载依赖的bean,所以,在Spring的加载顺序中,初始化某一个bean的时候首先初始化这个bean依赖的bean。
 这是不是很熟悉,就想加载子类先把父类加载出来似的。
8. 针对不同的scope进行bean的创建
 在Spring中存在不同的scope (默认 singleton, 还有prototype、request、session)
 单例(Singleton): 在整个应用中,创建一个bean
 原型(Prototype): 每次注入或者通过Spring上下文获取的时候都会创建一个新的bean
 会话(Session):在Web应用中,为每个会话创建一个bean实例
 请求(Request)在Web应用中,为每个请求创建一个bean
9. 类型转换
 Check if required type matches the type of the actual bean instance.
 加载结束

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值