Spring BeanFactory体系

BeanFactory及其子类

BeanFactory接口

主要定义了如下方法,这是比较经常使用的java

  • 一系列getBean方法.从容器中得到Bean
    • By Name
    • By Class
    • By Name + Class
  • isSingleton(Str)/isPrototype(Str) 在容器中是单例仍是原型
  • containsBean(String var1) 容器中是否有这个Bean

容器中使用Str name惟一标识Beanspring

从上图能够看出BeanFactory接口共有三个子类数组

ListableBeanFactory接口

extends BeanFactory 后加强BeanFactory接口app

容器能够以列表的形式提供Bean的相关信息编辑器

主要定义了如下方法spa

  • int getBeanDefinitionCount() 容器中Bean数量
  • String[] getBeanDefinitionNames 获取全部Bean定义的名字
  • String[] getBeanNamesForType 根据类型获取全部Bean定义的名字

HierarchicalBeanFactory接口

extends BeanFactory 后加强BeanFactory接口code

容器能够有层级关系的cdn

public interface HierarchicalBeanFactory extends BeanFactory {
    // 得到父容器
    @Nullable
    BeanFactory getParentBeanFactory();
    // 本地容器是否存在Bean
    boolean containsLocalBean(String var1);
}
复制代码

AutowireCapableBeanFactory接口

extends BeanFactory 后加强BeanFactory接口对象

容器能够自动装配Bean的能力blog

主要定义了如下方法:

  • createBean建立Bean
  • applyBeanPropertyValues 设置Bean的属性
  • initializeBean初始化Bean
  • applyBeanPostProcessorsBeforeInitialization 设置初始化前处理
  • applyBeanPostProcessorsAfterInitialization 设置初始化后处理
  • destroyBean 销毁Bean

ConfigurableBeanFactory接口

extends HierarchicalBeanFactory,SingletonBeanRegistry

IOC容器可配置的能力,

设置父容器,设置容器的类装载器,属性编辑器,容器通用的Bean初始化后置处理器等方法;

几乎全部的beanFactory都会实现这个接口,赋予了BeanFactory可扩展的功能。

SingletonBeanRegistry 接口

容器单例Bean相关的能力(在运行期间向容器注册单实例Bean)

  • registerSingleton
  • getSingleton
  • containsSingleton
  • getSingletonCount

整合接口ConfigurableListableBeanFactory

public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory 复制代码

整合了BeanFactory体系的接口

主要拓展了如下方法

  • getBeanDefinition 访问BeanDefinition
  • preInstantiateSingletons 预实例化singleton列表
  • isAutowireCandidate 给定nama的Bean是否能够做为依赖注入的备选

BeanDefinitionRegistry

向容器中注册Bean的能力

BeanDefinitionRegistry

spring配置文件中的每个bean节点元素在spring容器里都经过一个BeanDefinition对象表示,描述了Bean的配置信息。

BeanDefinitionRegistry接口提供了向容器手工注册BeanDefinition对象的方法

public interface BeanDefinitionRegistry extends AliasRegistry {  
    //注册BeanBeanDefinition
    void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException;  
    //移除BeanBeanDefinition
    void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;  
    //得到BeanDefinition
    BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;  
  
    boolean containsBeanDefinition(String beanName);  
  
    String[] getBeanDefinitionNames();  
  
    int getBeanDefinitionCount();  
  
    boolean isBeanNameInUse(String beanName);  
  
}  
复制代码

管理别名的公共接口 AliasRegistry

public interface AliasRegistry {  
    //注册一个别名 
    void registerAlias(String name, String alias);  
    //删除别名 
    void removeAlias(String alias);  
    //判断是不是别名 
    boolean isAlias(String beanName);  
    //得到一个名字的全部别名,以String数组的形式返回 
    String[] getAliases(String name);  
}  
复制代码

重要的整合 - DefaultListableBeanFactory

咱们终于能够看一眼全貌

左侧是咱们看过的BeanFactory体系,右侧是BeanDefinitionRegistry和抽象类实现

DefaultListableBeanFactory实现了ConfigurableListableBeanFactory,也就是实现了在BeanFactory体系讲过的能力.

实现了BeanDefinitionRegistry,拥有向容器注册Bean的基本能力

固然还有其余一些,好比SingletonBeannRegistry.

接口的能力是在继承的抽象类逐渐实现的,好比AbstractFactory和AbstractAutowireCapableBeanFactory.

DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现

相关文章
相关标签/搜索