①:获取注入对象的类型;
②:解析过程中对@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维护了对象间依赖与被依赖的关系 , 详细看下图
推荐阅读
-
配置一台4500元左右的 玩主流网友的台式机(最好能列出材料清单,以及建议从哪里买)谢了
-
中新经纬|百度涨5.14%,市值480.93亿美元
-
娱乐大家说说▲这几款合资SUV性价比不错,大空间高颜值还配四驱
-
财经作者陈琦 与英特尔、英伟达云端必有一战,“千年老二”AMD的再度逆袭
-
-
时尚萌主|再配上墨镜,简直帅呆了,唐嫣这件毛衣和短裙实在是太般配了
-
「美股研究社」星巴克股价高空坠落,投资者该买这张“特价入场券”么?
-
-
美好历史|刘家天下还可以持续多少年?,如果没有三国最后由蜀国完成一统
-
格格巫育儿|坐月子30天的说法呢?两者区别在哪?,为什么有产褥期42天
-
|《信条》首批短评出炉,“特工出击”版预告曝光 9月4日内地上映
-
半月谈|一个村有101个扶贫公益岗?好举措不能变为昏招
-
-
TVB女星被62岁绯闻对象当众揽入怀,身家丰厚住半山豪宅养10万爱宠
-
-
江苏省最有可能撤县设区的三座城,有一座百强县最受欢迎
-
打扮|冬季也要好好打扮自己,毛衣+阔腿裤,只加温度不减风度
-
爸妈盒子|担心打扰邻居,在群里做预告,业主:开个直播?,宝爸准备打孩子
-
明星照片|章子怡黑白武术大片曝光 光影叠加动作翩然刚劲
-
日本|菅义伟绝对优势当选日本新首相!民众哀叹:导弹马上要来了