Spring源碼(2)-Spring中的容器BeanFactory

Spring規定所有的IOC容器都必須實現BeanFactory接口,
BeanFactory是一個頂級的容器接口。

BeanFactory

BeanFactory裏有一個特殊的屬性,String FACTORY_BEAN_PREFIX = "&";
在這裏插入圖片描述
這個用來獲取FactoryBean本身的實例。注意FactoryBean和BeanFactory是完全不一樣的兩個東西 。
BeanFactory是容器的頂級 接口,定義了Bean工廠的一些操作方法。比如根據名字獲取實例,根據類型獲取實例==。
在這裏插入圖片描述
而FactoryBean也是一個接口,實現該接口的類實現 getObject方法來 生成一個Bean.工廠類也是一個類,他的作用是用來生成我們需要的其他的類,而不是注入到其他地方。
Spring在初始化的時候,會把這個接口的實現類給取出來,調用getObject來生成我們想要的Bean.
例子 :

public class UserFactoryBean implements FactoryBean<User> {

    @Override
    public User getObject() throws Exception {
        return new User();
    }

    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
}

    <bean class="com.fuyouj.model.factory.UserFactoryBean" id="userFactoryBean"></bean>

在這裏插入圖片描述
在這裏插入圖片描述
可以看到,使用了轉義字符的名稱獲取到的是工程類的本身。

BeanFactory的繼承體系

在這裏插入圖片描述

ListableBeanFactory

在這裏插入圖片描述
正如該接口的名字表達的意思,該接口定義了一列表的形式提供Bean的相關信息,這個接口最大的特點就是可以批量列出工長生產的實例信息 。
在這裏插入圖片描述
方法getBeanDefinitionCount獲取該容器內註冊的Bean的總數,getBeanDefinitionNames獲取BeanDefinition名字的集合==。

HierarchicalBeanFactory

在這裏插入圖片描述
此接口使得容器具備層次的關係
在這裏插入圖片描述
簡單的兩個方法,一個是返回本工廠的父工廠,一個是在本層級內查找是否有某個Bean.
實現了本 接口的容器可以在應用中起多個BeanFactory,並且可以設置父子關係關聯起來。這樣子就可以很好地適配三層架構,比如可以 讓A容器管理控制層的Bean,B容器管理業務層的Bean.然後通過層級關係關聯起來。

AutowireCapableBeanFactory

在這裏插入圖片描述
賦予了容器具備自動裝配Bean的能力(自動滿足Bean之間的依賴)

裏面定義了5種常量,在這裏插入圖片描述
我們使用的最多的就是現成的@Autowired標籤,該註解最終注入的方式是通過 resolveDependency來實現的依賴注入。而該接口裏面定義的5中常量對應着我們日常使用注入的幾種方式。
在這裏插入圖片描述

DefaultListableBeanFactory

在這裏插入圖片描述
DefaultListableBeanFactory是真正第一個可以獨立運行的IOC容器
在這裏插入圖片描述
實現了BeanDefinitionRegistry接口,顧名思義,可以註冊BeanDefinition.
在本類中,有一個醒目的成員變量。BeanDefinitionMap,存放的是本容器內BeanDefinition
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章