①:获取注入对象的类型;
②:解析过程中对@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维护了对象间依赖与被依赖的关系 , 详细看下图
推荐阅读
-
-
中国|全国政协召开双周协商座谈会围绕“讲好中国人权事业发展成就的故事”协商议政汪洋主持
-
-
痛风发作,除了多喝水,五种食物劝你还是少吃,为你好
-
-
黄河现第2号洪水|黄河现第2号洪水 黄河水利委员会发布蓝色预警
-
王者荣耀|王者荣耀:没有猫狗日记,教你提前获取限定星元!时之恋人免费抽
-
为什么专家建议每周跑步3-4天,但跑者一天不跑就会感觉不舒服?
-
奥妙|到宿迁市博物馆来一场“攻城游戏”,体验古代兵器奥妙
-
梅西|反转!曝巴萨为梅西标价:1亿转会费+3大巨星,尤文加入争夺
-
word怎么画方框然后打勾,word在方框里打勾的三种方法?
-
在陌陌上发了张自拍,被附近的教练私聊,要求办卡,不想办,就被嘲讽健身意识不强,嘲讽我身材不好别发自拍
-
-
「汽车轿车家用车」却被吊销驾照,交警:看看你驾照这4个字,女子拿证没开车没扣分
-
热烈祝贺壹号硒杯2020第23届足球赛圆满成功举行!
-
【】重磅发布!中央广播电视总台2019十大国内国际科技新闻
-
精不多|秋冬季内搭要精不多,有这5个“底款”就够了,时尚保暖又百搭
-
自报调查|英国与日本签署贸易协定,英国脱欧后首份“大单”来了
-
晚秋|原创七言绝句《晚秋》,好诗抒发真情实感,读此诗有无悲凉之意?
-
「历史的话语」如果没有这对父子,明朝必能恢复,明朝灭亡不怪崇祯