Spring BeanDefinitionRegistry源码解析

BeanDefinitionRegistry源码解析

继承关系

继承的接口

AliasRegistry主要用于别名注册,包含给beanName注册别名,删除别名,判断是否为别名,以及获取beanName对应的别名

/**
 * 用于管理别名的通用接口。 
 * 用作{@link  org.springframework.beans.factory.support.BeanDefinitionRegistry}的超级接口。 
 *  @author 于尔根·霍勒(Juergen Hoeller)@2.5.2起
 */
public interface AliasRegistry {

   /**
    * 给定名称,为其注册一个别名。 
    * @param name the canonical name(简洁的名字)
    * @param 别名 要注册的别名
    * @throws  IllegalStateException如果别名已在使用中并且可能不会被覆盖
    */
   void registerAlias(String name, String alias);

   /**
    * 从此注册表中删除指定的别名。 
    *  
    * @param alias 将要删除的别名
    * @throws  IllegalStateException 找不到别名
    */
   void removeAlias(String alias);

   /**
    * 确定给定名称是否被定义为别名(与实际注册的组件的名称相反)。 
    *  
    * @param name 要检查的名称
    * @return 给定名称是否为别名
    */
   boolean isAlias(String name);

   /**
    * 返回给定名称的别名(如果已定义)。 
    *  
    * @param name 要检查别名的bean的名称
    * @return 别名,如果没有则为空数组
    */
   String[] getAliases(String name);

}

本类解析

BeanDefinitionRegistry用于根据beanName注册BeanDefintion,主要包括beanName和对应 BeanDefinition 的注册、获取,removebeanName对应的注册,判断beanName是否已经注册,判断aliasbeanName是否已经被使用,获得BeanDefinition注册的个数,获得所有已注册的beanName

/**
 * 包含BeanDefinition的注册表的接口,例如RootBeanDefinition和ChildBeanDefinition实例。 
 * 通常由内部使用AbstractBeanDefinition层次结构的BeanFactories实现。 
 *  <p>这是Spring的bean工厂包中唯一封装<i>注册</ i> bean定义的接口。 
 * 标准BeanFactory接口仅涵盖对<i>完全配置的工厂实例</ i>的访问。 
 *  <p> Spring的Bean定义读者希望可以使用此接口的实现。 
 *  Spring核心中的已知实现者是DefaultListableBeanFactory和GenericApplicationContext。 
 *  @author  Juergen Hoeller @2003年11月26日起
 * @see  org.springframework.beans.factory.config.BeanDefinition 
 * @see  AbstractBeanDefinition 
 * @see  RootBeanDefinition 
 * @see  ChildBeanDefinition 
 * @see  DefaultListableBeanFactory 
 * @see  org.springframework.context.support.GenericApplicationContext 
 * @see  org.springframework.beans.factory.xml.XmlBeanDefinitionReader 
 * @see  PropertiesBeanDefinitionReader
 */
public interface BeanDefinitionRegistry extends AliasRegistry {

   /**
    * 在此注册表中注册新的BeanDefinition。
    * 必须支持RootBeanDefinition和ChildBeanDefinition。 
    *  
    * @param  beanName 要注册的bean实例的名称
    * @param beanDefinition 要注册的bean实例的BeanDefinition
    * @throws  BeanDefinitionStoreException 如果BeanDefinition无效
    * @throws  BeanDefinitionOverrideException 如果指定的bean已经有BeanDefinition名称,并且不
    */
   void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
         throws BeanDefinitionStoreException;

   /**
    * 删除给定名称的BeanDefinition。 
    *  
    * @param  beanName 已注册的bean实例的名称
    * @throws  NoSuchBeanDefinitionException 如果没有这样的bean定义
    */
   void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;

   /**
    * 返回给定bean名称的BeanDefinition。 
    *  
    * @param  beanName Bean的名称,以查找给定名称的BeanDefinition 
    * @return beanName对应的BeanDefinition(不返回{@code null})
    * @throws  NoSuchBeanDefinitionException 如果没有这样的bean定义
    */
   BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;

   /**
    * 检查此注册表是否包含具有给定名称的BeanDefinition。
    *  
    * @param  beanName 要查找的bean的名字
    * @return 是否这个注册中心包含给定的beanName对应的BeanDefinition
    * 
    */
   boolean containsBeanDefinition(String beanName);

   /**
    * 返回此注册表中定义的所有bean的名称。 
    *  
    * @return 此注册表中定义的所有bean的名称; 
    * 如果未定义,则为空数组
    */
   String[] getBeanDefinitionNames();

   /**
    * 返回注册表中定义的bean数。 
    *  
    * @return 注册表中定义的bean数
    */
   int getBeanDefinitionCount();

   /**
    * 确定给定的beanName是否已在此注册表中使用,换言之是否在此名称下注册了使用beanName或对应alias的本地bean。
    *  
    * @param  beanName 要检查的名称
    * @return 给定的bean名称是否已被使用
    */
   boolean isBeanNameInUse(String beanName);

}

总结

首先负责beanNameBeanDefinition关系的映射(注册),同时实现了AliasRegistry接口,将beanNamealias之间建立联系。

猜你喜欢

转载自www.cnblogs.com/akfak/p/12378464.html
今日推荐