BeanDefinitionRegistry

BeanDefinitionRegistry  是一个接口, 实现了AliasRegistry接口, 定义了一些对  bean的常用操作

    1: 以Map的形式注册bean

    2:根据beanName  删除和获取  beanDefiniation  ,得到持有的beanDefiniation的数目,根据beanName 判断是否包含              beanDefiniation等

BeanDefiniationRegistry  的默认实现类有三个, 

BeanDefinitionRegistry_第1张图片
  

     SimpleBeanDefinitionRegistry  

     是默认的一个实现方式   

  存储用的是ConcurrentHashMap   ,可以保证线程安全

/** Map of bean definition objects, keyed by bean name */
	private final Map beanDefinitionMap = new ConcurrentHashMap(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 aliasMap = new ConcurrentHashMap(16); 
         *       中是否有别名,  存在  返回 true, 不存在, 根据beanName查找  当前的map中有没有
		 */
		@Override       //  判断  name是否在存在,  首先isAlias(beanName)  会去调用
		public boolean isBeanNameInUse(String beanName) {
			return isAlias(beanName) || containsBeanDefinition(beanName);
		}



你可能感兴趣的:(BeanDefinitionRegistry)