①:获取注入对象的类型;
②:解析过程中对@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维护了对象间依赖与被依赖的关系 , 详细看下图
推荐阅读
-
-
男性养生|“阳气”衰退怎么补?医生:3件事或能帮助男性找回“自信”
-
-
生活小事情|这样可爱、时尚的蔬菜雕塑座椅,你见过吗?
-
新手快速成为老司机的方法 网络销售怎么做才能有业务
-
格隆汇APP|酷派集团(02369.HK)遭股东涂尔帆减持3703.2万股
-
汽车|汽车公司称买车可以抱一下亲一下 市监局回应:低俗营销
-
宁静人生路 回头率都挺高的……,听说年青女孩子这样穿的话
-
-
北青网综合|床底钻进一条蛇, 一住就是三年!男子却说: 不想它离开…
-
谷维素|谷维素和维B12都有什么功效?服用有何注意事项?医生为你详解
-
-
穷游|为啥川藏线看到女人搭车要躲开?不是不想帮,这3个毛病太严重
-
三国两晋南北朝|救了一位五虎将,吓退两位五子良将,赵云是真的有这么强?
-
-
手机中国|支持IP55防尘防水!,一加新款真无线蓝牙耳机官宣
-
郭德纲|京城京四美的景甜因为张继科导致的一系列后果,不堪设想
-
文竹能不能在卧室养?虽然它很好看,但要小心它对身体造成危害
-
-
「人民日报」人社部:鼓励事业单位科研人员在职或离岗创业