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的默認實現

相關文章
相關標籤/搜索