①:获取注入对象的类型;
②:解析过程中对@value注解支持;
③:通过findAutowireCandidates()方法 , 根据属性类型找到BeanFactory中所有类型匹配的Bean 。 存放在Map中返回 。 在该方法中 , 会根据给定的类型获取所有Bean的名称作为Map中的key 。
对类型匹配的Bean做相应的判断 , 如果大于1个 , 则通过determineAutowireCandidate()方法来确定注入Bean的名称 。 首先根据@Primary注解的对象来确定 , 如果有则返回;然后再通过@Priority注解的对象 , 如果有则返回 。 如果等于1个 , 在返回Map中的key就是beanName;通过上述的描述发现@Autowired注解属性的方式先通过byType的方式获取对应类型的对象;当对应类型的对象大于1个时 , 通过byName的方式来确定 。
④:最后descriptor.resolveCandidate(autowiredBeanName,type,this);通过beanFactory.getBean(beanName);获取注入的对象 。
4.2对象之间依赖关系的维护
在通过beanFactory.resolveDependency()方法获得依赖的对象之后 , 通过registerDependentBeans()方法来维护对象之间的依赖关系 。
publicvoidregisterDependentBean(StringbeanName,StringdependentBeanName){StringcanonicalName=canonicalName(beanName);/***dependentBeanMap中存储的是目前已经注册的依赖这个bean的所有bean,*这里从这个集合中获取目前所有已经注册的依赖beanName的bean集合,*然后看这个集合中是否包含dependentBeanName,即是否已经注册,*如果包含则表示已经注册,则直接返回;*否则,将bean依赖关系添加到两个map缓存即完成注册.*/synchronized(this.dependentBeanMap){SetdependentBeans=this.dependentBeanMap.computeIfAbsent(canonicalName,k->newLinkedHashSet<>(8));if(!dependentBeans.add(dependentBeanName)){return;}}synchronized(this.dependenciesForBeanMap){SetdependenciesForBean=this.dependenciesForBeanMap.computeIfAbsent(dependentBeanName,k->newLinkedHashSet<>(8));dependenciesForBean.add(canonicalName);}}上述的代码中 , 有两个Map 。 这里首先对这两个Map稍加解释:
/**指定的bean与目前已经注册的依赖这个指定的bean的所有依赖关系的缓存(我依赖的)*/privatefinalMap>dependentBeanMap=newConcurrentHashMap<>(64);/**指定bean与目前已经注册的创建这个bean所需依赖的所有bean的依赖关系的缓存(依赖我的)*/privatefinalMap>dependenciesForBeanMap=newConcurrentHashMap<>(64);复制代码在上述的方法中 , 就是通过上述两个Map维护了对象间依赖与被依赖的关系 , 详细看下图
推荐阅读
-
智能家居科技 14还能这么用?揪出凶手,到底谁在窥探你的隐私?,iOS
-
视频|真 · 拦路虎!的哥开车偶遇东北虎,默默对视20分钟……
-
OLED|扭转国产OLED行业口碑!卢伟冰称1.5K将是手机行业新主流
-
-
谷歌|几个月前嘲笑iPhone取消耳机孔的谷歌:终于自己破功了
-
金正恩视察灾区重建工作 胞妹陪同前往 系两个月来首次露面
-
林正英真的会茅山术吗,林正英怎么会懂那么多茅山道术-
-
-
张歆艺|张歆艺穿制服躺床上玩闹,穿短裙单脚卖力抬高,姿势豪迈不怕走光
-
-
产妇没有奶水如何催奶,刚生了孩子没有奶水怎么办怎么催奶-
-
-
未说育儿|这些行为最“伤”胎儿,你每天都在做,孕妈要知道
-
腾讯科技网易聆讯后资料披露董事会成员名单,去年向高管及董事支付1760万薪酬
-
答摩健康|为什么你做的明年计划不靠谱?因为你是用今年的脑子想的!
-
数据宝|仅24只,数说A股:基金扎堆的牛股大跌6%!“小而美”股票名单来了
-
中国基金报|重要信号!货币ETF规模激增330亿 啥情况?
-
三分亮剑|危险决定直接影响邻国安全,韩国启动紧急应对,日本不再遮遮掩掩
-
江苏经济报@江苏227家交通运输企业获融资授信8亿元
-