javascript
Spring 核心容器类BeanFactory
Spring Bean 的創建是典型的工廠模式,這一系列的Bean 工廠,也即IOC 容器為開發者管理對象間的依賴關系提供了很多便利和基礎服務,在Spring 中有許多的IOC 容器的實現供用戶選擇和使用,其相互關系如下:
其中BeanFactory 作為最頂層的一個接口類,它定義了IOC 容器的基本功能規范,BeanFactory 有三個重要的子類:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是從類圖中我們可以發現最終的默認實現類是DefaultListableBeanFactory,它實現了所有的接口。
那為何要定義這么多層次的接口呢?查閱這些接口的源碼和說明發現,每個接口都有它使用的場合,它主要是為了區分在Spring 內部在操作過程中對象的傳遞和轉化過程時,對對象的數據訪問所做的限制。例如ListableBeanFactory 接口表示這些Bean 是可列表化的,而HierarchicalBeanFactory 表示的是這些Bean 是有繼承關系的,也就是每個Bean 有可能有父Bean。AutowireCapableBeanFactory 接口定義Bean 的自動裝配規則。這三個接口共同定義了Bean 的集合、Bean 之間的關系、以及Bean 行為。最基本的IOC 容器接口BeanFactory,來看一下它的源碼:
public interface BeanFactory {//對FactoryBean的轉義定義,因為如果使用bean的名字檢索FactoryBean得到的對象是工廠生成的對象,//如果需要得到工廠本身,需要轉義String FACTORY_BEAN_PREFIX = "&";//根據bean的名字,獲取在IOC容器中得到bean實例Object getBean(String name) throws BeansException;//根據bean的名字和Class類型來得到bean實例,增加了類型安全驗證機制。<T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;Object getBean(String name, Object... args) throws BeansException;<T> T getBean(Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;//提供對bean的檢索,看看是否在IOC容器有這個名字的beanboolean containsBean(String name);//根據bean名字得到bean實例,并同時判斷這個bean是不是單例boolean isSingleton(String name) throws NoSuchBeanDefinitionException;boolean isPrototype(String name) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException;//得到bean實例的Class類型@NullableClass<?> getType(String name) throws NoSuchBeanDefinitionException;//得到bean的別名,如果根據別名檢索,那么其原名也會被檢索出來String[] getAliases(String name);}在BeanFactory 里只對IOC 容器的基本行為作了定義,根本不關心你的Bean 是如何定義怎樣加載的。正如我們只關心工廠里得到什么的產品對象,至于工廠是怎么生產這些對象的,這個基本的接口不關心。
而要知道工廠是如何產生對象的,我們需要看具體的IOC 容器實現,Spring 提供了許多IOC 容器的實現。比如GenericApplicationContext , ClasspathXmlApplicationContext 等。
ApplicationContext 是Spring 提供的一個高級的IOC 容器,它除了能夠提供IOC 容器的基本功能外,還為用戶提供了以下的附加服務。從ApplicationContext 接口的實現,我們看出其特點:
1、支持信息源,可以實現國際化。(實現MessageSource 接口)
2、訪問資源。(實現ResourcePatternResolver 接口,后面章節會講到)
3、支持應用事件。(實現ApplicationEventPublisher 接口)
?
總結
以上是生活随笔為你收集整理的Spring 核心容器类BeanFactory的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再谈IOC 与DI
- 下一篇: Spring 核心容器类BeanDefi