通过上面的源码分析,我们可以看出来通过属性名进行自动依赖注入的相对比通过属性类型进行自动依赖注入要稍微简单一些,但是真正实现属性注入的是DefaultSingletonBeanRegistry类的registerDependentBean方法。
(3).DefaultSingletonBeanRegistry的registerDependentBean方法对属性注入:
[java] view plaincopy- //为指定的Bean注入依赖的Bean public void registerDependentBean(String beanName, String dependentBeanName) {
- //处理Bean名称,将别名转换为规范的Bean名称 String canonicalName = canonicalName(beanName);
- //多线程同步,保证容器内数据的一致性 //先从容器中:bean名称-->全部依赖Bean名称集合找查找给定名称Bean的依赖Bean
- synchronized (this.dependentBeanMap) { //获取给定名称Bean的所有依赖Bean名称
- Set
dependentBeans = this.dependentBeanMap.get(canonicalName); if (dependentBeans == null) { - //为Bean设置依赖Bean信息 dependentBeans = new LinkedHashSet
(8); - this.dependentBeanMap.put(canonicalName, dependentBeans); }
- //向容器中:bean名称-->全部依赖Bean名称集合添加Bean的依赖信息 //即,将Bean所依赖的Bean添加到容器的集合中
- dependentBeans.add(dependentBeanName); }
- //从容器中:bean名称-->指定名称Bean的依赖Bean集合找查找给定名称 //Bean的依赖Bean
- synchronized (this.dependenciesForBeanMap) { Set
dependenciesForBean = this.dependenciesForBeanMap.get(dependentBeanName); - if (dependenciesForBean == null) { dependenciesForBean = new LinkedHashSet
(8); - this.dependenciesForBeanMap.put(dependentBeanName, dependenciesForBean); }
- //向容