BeanDefinitionRegistry

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);
		}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值