BeanDefinitionRegistry 是一个接口, 实现了AliasRegistry接口, 定义了一些对 bean的常用操作
1: 以Map<String, BeanDefinition>的形式注册bean
2:根据beanName 删除和获取 beanDefiniation ,得到持有的beanDefiniation的数目,根据beanName 判断是否包含 beanDefiniation等
BeanDefiniationRegistry 的默认实现类有三个,

SimpleBeanDefinitionRegistry
是默认的一个实现方式
存储用的是ConcurrentHashMap ,可以保证线程安全
/** Map of bean definition objects, keyed by bean name */
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(64);
后面的方法便是提供 BeanDefinitionRegistry 的实现方式
@Override // 注册
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
throws BeanDefinitionStoreException {
Assert.hasText(beanName, "'beanName' must not be empty");
Assert.notNull(beanDefinition, "BeanDefinition must not be null");
this.beanDefinitionMap.put(beanName, beanDefinition);
}
@Override //根据name 删除, 不存在 , 抛出NoSuchBeanDefinitionException异常
public void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
if (this.beanDefinitionMap.remove(beanName) == null) {
throw new NoSuchBeanDefinitionException(beanName);
}
}
@Override // 根据name 获取 , 不存在抛出NoSuchBeanDefinitionException异常
public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
BeanDefinition bd = this.beanDefinitionMap.get(beanName);
if (bd == null) {
throw new NoSuchBeanDefinitionException(beanName);
}
return bd;
}
@Override // 根据beanName 判断是否 存在
public boolean containsBeanDefinition(String beanName) {
return this.beanDefinitionMap.containsKey(beanName);
}
@Override // 获取所有的name
public String[] getBeanDefinitionNames() {
return StringUtils.toStringArray(this.beanDefinitionMap.keySet());
}
@Override // 获取map中的 beanDefinition的 数目
public int getBeanDefinitionCount() {
return this.beanDefinitionMap.size();
}
/*
* // 判断 name是否在存在, 首先isAlias(beanName) 会去调用SimpleAliasRegistry 中的
* @Override
* public boolean isAlias(String name) {
* return this.aliasMap.containsKey(name);
* }
* 查找/** Map from alias to canonical name
* private final Map<String, String> aliasMap = new ConcurrentHashMap<String, String>(16);
* 中是否有别名, 存在 返回 true, 不存在, 根据beanName查找 当前的map中有没有
*/
@Override // 判断 name是否在存在, 首先isAlias(beanName) 会去调用
public boolean isBeanNameInUse(String beanName) {
return isAlias(beanName) || containsBeanDefinition(beanName);
}