AliasRegistry
2018-03-14 本文已影响0人
AlexS18_
AliasRegistry接口定义了alias的基本操作。
其中包含了一下几个接口:
void registerAlias(String name, String alias);//为指定名称注册别名
void removeAlias(String alias);//移除别名
boolean isAlias(String name);//检查指定名称是被定义为别名
String[] getAliases(String name);//返回指定名称的所有别名
SimpleAliasRegistry类对AliasRegistry进行了实现,其中使用了Map对alias进行缓存。
使用ConcurrentHashMap缓存别名与名称的映射关系为指定名称注册别名,有以下几步:
1、校验输入参数。
2、不允许别名与指定名称一致,且移除已注册列表中该别名(不管已注册列表中是否存在该别名)。
3、如别名已注册则不再重复注册,根据是否允许覆盖条件判断是否抛出异常。
4、递归检查指定名称与别名是否存在环形指向关联关系。
5、注册别名。
注册别名因为SimpleAliasRegistry根据名称获取别名列表时,会将直接、间接关系的别名均列出来,所以注册别名时不允许名称与别名见存在环形指向关联关系。
递归检查别名关联关系 检查name是否直接或间接关联alias移除别名、检查指定名称是被定义为别名。
根据指定名称获取所有别名,递归检索,其中包含直接指向的别名与间接指向的别名。
根据指定名称获取别名列表 递归检索别名