Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Spring源码解析 - AbstractBeanFactory 实现接口与父类分析

我们先来看类图吧:除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegistry和SingletonBeanRegistry接口.这边主要提供了这样的三个功能: 别名管理,单例创建与注册,工厂方法FactoryBean支持.我们来看看这些接口,类的主要职责吧:BeanFactory Spring IOC容器的根接口-- HierachicalBeanFactory 实现容器的继承,就是可以有父 BeanFactory-- -- ConfigureabelBeanFactory 提供factory的配置功能AliasRegistry 定义bean name的别名管理-- SimpleAliasRegistry 在实现别名管理接口基础上,添加一个canonicalName查找类真是名称apiSingletonBeanRegistry 提供单例注册,查询服务-- DefaultSingletonBeanRegistry 实现单例与DisposableBean的生命周期管理(创建,维护,销毁)-- -- FactoryBeanRegistrySupport 添加工厂方式创建类FactoryBean的支持-- -- -- AbstractBeanFactory BeanFactory的抽象实现.也就是说这边可以分为这样几类职责:a, 类别名管理b, 单例生命周期管理c, 工厂方法初始化类对应的FactoryBeand, BeanFactory容器BeanFactory容器的职责(BeanFactory,HierachicalBeanFactory,ConfigureableBeanFactory)在上一篇文章<Spring源码解析 - BeanFactory接口体系解读>里已经分析过,有兴趣可以看下http://www.linuxidc.com/Linux/2016-03/129118.htm.我们今天主要分析其他的三个职责,如下的接口与类(顺便做目录):1. AliasRegistry 定义bean name的别名管理2. SimpleAliasRegistry 实现别名管理接口3. SingletonBeanRegistry 提供单例注册,查询服务4. DefaultSingletonBeanRegistry 实现单例与DisposableBean的生命周期管理(创建,维护,销毁)5. FactoryBeanRegistrySupport 添加工厂方式创建类FactoryBean的支持1. AliasRegistry 定义bean name的别名管理提供别名的注册,查找,删除,判断定义. 看个类图就行,不用展开.2. SimpleAliasRegistry 实现别名管理接口这边除了实现接口定义的api,还添加了两个公共api: 批量校验别名public void resolveAliases(StringValueResolver valueResolver)和查找别名对应的原始类名public String canonicalName(String name)这边以别名为key缓存数据.1 /** Map from alias to canonical name */2 private final Map<String, String> aliasMap = new ConcurrentHashMap<String, String>(16);分析下api实现逻辑吧:2.1 别名注册 registerAlias(String name, String alias)2.2 删除别名public void removeAlias(String alias) 校验下,如果别名不存在报错:throw new IllegalStateException("No alias "" + alias + "" registered");2.3 判断别名是否存在 直接使用ConcurrentHashMap的containsKey2.4 获取别名public String[] getAliases(String name) 主要逻辑是加了个锁,然后是递归调用retrieveAliases,查找多层次的别名(就是查找别名的别名这些下去)2.5 使用StringValueResolver解析类名,别名后,进行循环依赖的校验 这边使用的是StringValueResolver的接口,具体实现需要靠注入更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-03/129147p2.htm