AliasRegistry

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

移除别名、检查指定名称是被定义为别名。

根据指定名称获取所有别名,递归检索,其中包含直接指向的别名与间接指向的别名。

根据指定名称获取别名列表
递归检索别名

你可能感兴趣的:(AliasRegistry)