前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 源码脉络IOC/DI-Bean创建过程

Spring 源码脉络IOC/DI-Bean创建过程

作者头像
码农架构
发布2020-10-29 14:45:38
3280
发布2020-10-29 14:45:38
举报
文章被收录于专栏:码农架构码农架构

结合上一篇 Spring 源码脉络IOC/DI -BeanFactory、ApplicationContext 已了解BeanFactoryApplicationContext 的所拥有的功能和能力,本篇核心讲解基于BeanFactory以及ApplicationContext Bean的创建过程

1BeanFactory

2ApplicationContext

3Bean创建过程

4、容器扩展

5、感知接口 *Aware

6、广播与监听

7、资源

8、运行环境抽象

查看源码根据Bean的创建过程画流程图便于跟进解读分析,如下图

Bean的加载过程分为三步走

  • 获取Bean AbstractBeanFactory.getBean
  • 创建Bean AbstractAutowireCapableBeanFactory.createBean
  • 实现Bean自动装配的接口 InstantiationAwareBeanPostProcessor

一. AbstractBeanFactory.getBean

获取Bean

  • AbstractBeanFactory.doGetBean 具体获取Bean的方法
    • getMergedLocalBeanDefinition 返回合并的RootBeanDefinition 每个bean名称对应自己的RootBeanDefinition,所有的RootBeanDefinition存在AbstractBeanFactory.mergedBeanDefinitions这个ConcurrentHashMap中
  • getSingleton 如果是单例,实现方法DefaultSingletonBeanRegistry .getSingleton
    • ObjectFactory.getObject() 工厂设计模式创建bean // createBean
    • DefaultSingletonBeanRegistry.addSingleton 把实例化对象放入DefaultSingletonBeanRegistry.singletonObjects这个ConcurrentHashMap中
  • createBean 如果是原型,直接创建bean

二、AbstractAutowireCapableBeanFactory .createBean

  • resolveBeforeInstantiation 实例化之前的调用,调用所有的InstantiationAwareBeanPostProcessor的 postProcessBeforeInstantiation方法
  • doCreateBean
  • registerDisposableBeanIfNecessary 注册Bean的Disposable接口,用于执行销毁逻辑

三、InstantiationAwareBeanPostProcessor 实现Bean自动装配的接postProcessPropertyValues

  • AutowiredAnnotationBeanPostProcessor Bean @AutoWired自动装配
    • findAutowiringMetadata 查找Bean需要AutoWired的元数据,比如属性、setter、构造函数
    • AutowiredMethodElement.inject 属性注入
  • CommonAnnotationBeanPostProcessor @Resource @WebServiceRef @EJB等注解的自动装配
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档