注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小葫芦君(汉斯的博客)

博客迁移到新博客:https://blog.ssxingshou.com

 
 
 

日志

 
 
关于我

小小葫芦商城,为您提供高品质的商品,一流的产品,一流的包装服务,一流的物流服务,放心购买

网易考拉推荐

Spring的BeanFactory体系结构(二) – SimpleAliasRegistry  

2011-03-21 11:51:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

SimpleAliasRegistry实现的是AliasRegistry,也就是提供了别名的注册场所。

AliasRegistry是一个通用的管理别名的接口,BeanDefinitionAliasRegistry接口就是继承此接口。

此接口定义的方法(服务)也很简单:

  • registerAlias 注册一个别名
  • removeAlias 删除别名
  • isAlias 判断是否是别名
  • getAliases 获得一个名字的所有别名,以String数组的形式返回

那它的实现SimpleAliasRegistry,其内部采用了一个ConcurrentHashMap来进行别名的存储。因为方法的数量比较少,所以分别对这四个方法进行详读。

void registarAlias(String name, String alias)

首先,会看看 name 是否和 alias 相等,如果相等,就把存储器中的 alias 删除。

然后,其内部还定义了一个 allowAliasOverriding 的方法来判断是否允许覆盖。子类可以复写此方法,调整其策略。

void removeAlias(String alias)

很容易理解,但是这里需要注意,如果这个alias找不到,那么程序是会直接抛异常的,而不是默默的忽略。这个点在接口中也有提到的。

boolean isAlias(String name)

判断其是否是别名。

String[] getAliases(String name)

此方法会同步其内部的存储器,然后递归的进行查找,直到把所有的别名找出为止。

这里有个问题,为什么synchronized的对象,是这个内部的存储器呢?

经过一系列的研究,终于了解。原来,内部的存储器,是一个ConcurrentHashMap,而对这个存储器进行上锁,可以有效的防止在获取别名是,其他线程对存储器的修改。

  评论这张
 
阅读(902)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017