Spring系列文章首發:簡單聊聊BeanFactory繼承體系 緩存
Spring 配置文件中每個節點元素在 Spring 容器裏都經過一個 BeanDefinition 對象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工註冊BeanDefinition 對象的方法。編輯器
位於類結構樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中返回特定名稱的 Bean,BeanFactory 的功能經過其餘的接口獲得不斷擴展。cdn
該接口定義了訪問容器中 Bean 基本信息的若干方法,如查看 Bean 的個數、獲取某一類型Bean 的配置名、查看容器中是否包括某一 Bean 等方法。對象
父子級聯 IoC 容器的接口,子容器能夠經過接口方法訪問父容器; 經過HierarchicalBeanFactory 接口, Spring 的 IoC 容器能夠創建父子層級關聯的容器體系,子容器能夠訪問父容器中的 Bean,但父容器不能訪問子容器的 Bean。Spring 使用父子容器實現了不少功能,好比在 Spring MVC 中,展示層 Bean 位於一個子容器中,而業務層和持久層的 Bean 位於父容器中。這樣,展示層 Bean 就能夠引用業務層和持久層的 Bean,而業務層和持久層的 Bean 則看不到展示層的 Bean。blog
是一個重要的接口,加強了 IoC 容器的可定製性,它定義了設置類裝載器、屬性編輯器、容器初始化後置處理器等方法。繼承
定義了將容器中的 Bean 按某種規則(如按名字匹配、按類型匹配等)進行自動裝配的方法。接口
定義了容許在運行期間向容器註冊單實例 Bean 的方法;對於單實例( singleton)的 Bean 來講,BeanFactory 會緩存 Bean 實例,因此第二次使用 getBean() 獲取 Bean 時將直接從IoC 容器的緩存中獲取 Bean 實例。Spring 在 DefaultSingletonBeanRegistry 類中提供了一個用於緩存單實例 Bean 的緩存器,它是一個用 HashMap 實現的緩存器,單實例的 Bean 以beanName 爲鍵保存在這個 HashMap 中。get