registerDependentBean方法的解析(注册bean的依赖关系)
源码如下:
public void registerDependentBean(String beanName, String dependentBeanName) {// A quick check for an existing entry upfront, avoiding synchronization...String canonicalName = canonicalName(beanName);/*dependentBeanMap中存储的是目前已经注册的依赖这个bean的所有bean,这里从这个集合中获取目前所有已经注册的依赖beanName的bean集合,然后看这个集合中是否包含dependentBeanName,即是否已经注册,如果包含则表示已经注册,则直接返回,否则,将bean依赖关系添加到两个map缓存即完成注册*/Set<String> dependentBeans = this.dependentBeanMap.get(canonicalName);if (dependentBeans != null && dependentBeans.contains(dependentBeanName)) {return;}// No entry yet -> fully synchronized manipulation of the dependentBeans Setsynchronized (this.dependentBeanMap) {dependentBeans = this.dependentBeanMap.get(canonicalName);if (dependentBeans == null) {dependentBeans = new LinkedHashSet<>(8);this.dependentBeanMap.put(canonicalName, dependentBeans);}dependentBeans.add(dependentBeanName);}synchronized (this.dependenciesForBeanMap) {Set<String> dependenciesForBean = this.dependenciesForBeanMap.get(dependentBeanName);if (dependenciesForBean == null) {dependenciesForBean = new LinkedHashSet<>(8);this.dependenciesForBeanMap.put(dependentBeanName, dependenciesForBean);}dependenciesForBean.add(canonicalName);}}

首先解释下上述代码中用到的两个map缓存集合,如下:

private final Map<String, Set<String>> dependentBeanMap = new ConcurrentHashMap<String, Set<String>>(); //指定的bean与目前已经注册的依赖这个指定的bean的所有bean的依赖关系的缓存(我依赖的)
private final Map<String, Set<String>> dependenciesForBeanMap = new ConcurrentHashMap<String, Set<String>>(); //指定bean与目前已经注册的创建这个bean所需依赖的所有bean的依赖关系的缓存(依赖我的)
知道了这两个集合的意思,再参考上述源码中的注释,就不难理解这段代码的意思了

Spring IOC学习心得之注册bean的依赖关系相关推荐

  1. Spring IOC学习心得之Bean对IOC容器的感知

    容器管理的Bean一般不需要了解容器的状态和直接使用Bean,但是在某些情况下,是需要在Bean中直接对IOC容器进行操作的,这时候,就需要在Bean中设定对容器的感知.Spring IOC也提供了该 ...

  2. Spring IOC学习心得之IOC容器的初始化过程

    注:本文大多数内容都是摘自<Spring技术内幕>这本书 简单来说,Ioc容器的初始化过程是在refresh()方法中启动的,包括BeanDefinition的Resource定位,载入和 ...

  3. Spring IOC学习心得之源码级分析ContextLoaderListener的作用(IOC容器初始化入口)

    ContextLoaderListener类是负责初始化IOC容器,即在我们的web项目中,这里就是IOC容器初始化的入口,由这个类启动IOC容器的初始化. 它配置在web.xml中,比如如下配置: ...

  4. Spring IOC学习心得之BeanPostProcessor,BeanNameAware,BeanClassLoaderAware,BeanFactoryAware接口是如何起作用的

    1. 首先说下BeanPostProcessor接口中的两个方法,如下: package org.springframework.beans.factory.config;import org.spr ...

  5. Spring - BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean

    文章目录 Pre org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor 接口的继承关系 BeanD ...

  6. 4、IOC 之Bean的依赖关系

    4.IOC 之Bean的依赖关系 4.1.依赖注入(DI) 依赖关系注入 (DI) 是一个过程,其中对象仅通过构造函数参数.工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义 ...

  7. 关于spring IoC 学习

    What is IoC 简单来说: 控制:当前对象对其内部成员对象的控制权/获取组装对象的过程 反转:上述的过程/控制权,交由专门的第三方组件(容器或者说平台)来管理 这种从具体对象手中,交出控制的做 ...

  8. 【Spring】Spring IOC学习笔记

    Spring IOC Spring简介 Spring理念 使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架 Spring优点 Spring是一个轻量级的 控制反转(IOC) 和 面向切 ...

  9. Spring Ioc源码分析 之 Bean的加载(7):初始化

    接着分析doCreateBean()的第6步--初始化 bean 实例对象 首先回顾下CreateBean的主流程: 如果是单例模式,从factoryBeanInstanceCache 缓存中获取Be ...

最新文章

  1. 成功爬取-CVE-2018-15982漏洞复现【博客园】【1】
  2. 基础知识——用户输入和函数(五)
  3. iOS开发之让你的应用“动”起来转写
  4. IBM迎来新任CEO,又一美国科技巨头被印度裔掌舵
  5. java去除不为null,JAVA代码中去掉 “!=null”
  6. Office远程代码执行漏洞补丁(905413)
  7. php程序员必会的,PHP程序员必会的MySQL面试题
  8. 一文读懂 | 进程并发与同步
  9. oracle 换字段顺序,修改ORACLE的字段顺序
  10. JSP中鼠标禁用代码
  11. SpringCloud工作笔记040--- XMLHTTP中setRequestHeader()方法解析
  12. 第19章 可空值类型
  13. python制作简单网页_怎么用python简单的制作一个网页
  14. 海豚浏览器显示连接服务器失败,海豚浏览器常见问题解答
  15. 人生感悟:影响人成功和幸福的21点
  16. c语言count的作用,C语言中count是什么意思?
  17. vector erase
  18. linux 进程的作用,ubuntu9.10这些进程有什么作用?
  19. 基于 HTML5 WebGL 的高炉炉体三维热力图监控,展示“智慧工厂”十八般武艺
  20. U9服务器显示不全,U9常见技术问题分析与解决.docx

热门文章

  1. 循环、选择要注意的复合语句
  2. [原][osg]Geometry详解
  3. mysql ---事务
  4. UIAlertControl的使用对比与UIAlertView和UIActionSheet
  5. 24种设计模式--命令模式【Command Pattern】
  6. 【转】Tomcat中部署java web应用程序
  7. Sql Server 2005 获取表结构信息
  8. 利用课间10分钟,打造一个恶劣天气实时预警系统
  9. Spring MVC 自定义验证器示例
  10. Reverse digits of an integer