Spring提供了很多容器实现,最核心的是DefaultListableBeanFactory,称为spring的“发动机”也不为过。查看DefaultListableBeanFactory的继承体系,可以看到最上游上的四个接口,分别是 BeanFactory, SigletonBeanRegistry , AliasReistry,BeanDefinitionRegistry。
可以大略看到,这些接口大致分为两类,右上角都是Registry注册器,左下角都是Factory工厂。
这篇文章暂时聚焦到较孤立和简单的AliasRegistry 接口和它的实现 SimpleAliasRegistry,看一下spring的别名体系。
顾名思义,AliasRegistry提供了别名的注册管理。与alias对应的是canonical(正名),SimpleAliasRegistry 维护了一个把别名和正名关联起来的map,key为别名,value为正名。别名关系是相对的和传递的,一条记录(Map.Entry)中的正名在另一条记录中可以是别名。
SimpleAliasRegistry 通过一些方法将服务暴露出来,包括
registerAlias:
isAlias:
hasAlias:
retriveAliases: 获取正名的所有别名
resolveAliases: 将map中所有的key和value使用 StringValueResolver 刷新一遍。
checkForAliasCircle: 检查是否有循环(别名与正名必须是有向无环的关系)
canonicalName: 获取正名(根据别名传递关系,找到关系链条的尾部)
还有其他一些方法,通过方法的命名就可以明白作用