
BeanFactory:Spring的Bean容器最頂層的接口,定義了Ioc容器的基本規範。實作這個接口的Ioc容器都會持有一些BeanDefinition和一個唯一的字元串形式的名字。--《Spring之1:的BeanFactory和FactoryBean》
HierarchicalBeanFactory:HierarchicalBeanFactory繼承BeanFactory并擴充使其支援層級結構。getParentBeanFactory()方法或者父級BeanFactory,containsLocalBean(String name)方法檢視目前BeanFactory是否包含給定名字的Bean,不會遞歸想父級查找。--《Spring之2:HierarchicalBeanFactory接口》
ListableBeanFactory:同樣擴充BeanFactory使其支援疊代Ioc容器持有的Bean對象。注意如果ListableBeanFactory同時也是HierarchicalBeanFactory,那麼大多數情況下,隻疊代目前Ioc容器持有的Bean對象,不會在體系結構中想父級遞歸疊代。具體情況請看API說明。--《Spring之3:ListableBeanFactory》
ResourceLoader:Spring提供資源的根接口。在Spring Ioc中,資源被Resource引用,獲得Resource對象,說明獲得了資源的通路。Resource提供資源的抽象,具體資源可是從URL,classpath,file等地方獲得。
ResourcePatternResolver:ResourcePatternResolver是對ResourceLoader的擴充,其支援模式比對的資源。如:classpath*:表示比對路徑下所有的資源。
DefaultResourceLoader:ResourceLoader的預設實作,可以單獨使用,也可以通過擴充使其支援特殊的資源,如:FileSystemResourceLoader,ClassPathXmlApplicationContext等。
ApplicationEventPublisher:封裝事件釋出,通知事件監聽者此Application的事件。
MessageSource:處理Spring 中的消息,支援i18n和參數化消息。另外其子類ReloadableResourceBundleMessageSource支援不重新開機JVM重新整理消息。
EnvironmentCapable:實作此接口的容器将支援上下文環境。在Spring Ioc容器中,都是支援上下文環境的。
ApplicationContext:從上圖來看,ApplicationContext繼承了上面描述的所有接口,是以ApplicationContext是一個接口集合,提供所繼承接口的功能。另外,ApplicationContext在啟動後是隻讀的,但是如果ApplicationContext實作類支援reload,也可以重新整理這個ApplicationContext。
Lifecycle:對BeanFactory提供生命周期支援。另外其他任何對象都可以實作Lifecycle接口開支援開始/結束控制。注意Lifecycle接口隻支援頂層對象,其他的Lifecycle将被忽略。
DisposableBean:DisposableBean提供了在銷毀Ioc容器的時候釋放資源。
ConfigurableApplicationContext:提供對Ioc容器的配置的支援。包括設定父級容器,設定上下文環境,重新整理容器,注冊關閉容器鈎子等。
AbstractApplicationContext:AbstractApplicationContext是Ioc容器的抽象實作,這裡實作了大部分的功能:消息,事件,重新整理容器,生命周期等。AbstractApplicationContext采用模闆方法模式,把一部分實作推遲到子類。
AbstractRefreshableApplicationContext:提供多線程同時重新整理容器支援,每次重新整理都會産生一個内部BeanFactory(DefaultListableBeanFactory)。另外,子類要實作loadBeanDefinitions方法來正确加載Bean定義。
Aware:Aware是個标記接口,實作這個接口的對象提供通知Spring容器功能。具體個通知動作來子類中定義。
BeanNameAware:Aware的子接口,當設定BeanName的時候,建立通知。
InitializingBean:這個接口作用是當Bean對象的屬性都被設定完成或,可以立即做一些自定義的動作。令一個替代方案是設定init-method。
AbstractRefreshableConfigApplicationContext:提供對容器的一些特殊設定:setConfigLocation,setBeanName,setId等。
AbstractXmlApplicationContext:從XML讀取Bean定義的容器,這個容器實作了loadBeanDefinitions方法,從XML資源中獲得Bean定義。
FileSystemXmlApplicationContext:标準的從檔案系統讀XML的Bean定義容器。getResourceByPath方法傳回檔案系統資源。
說了這麼多的BeanFactory,還有一個重量級的沒有說:DefaultListableBeanFactory--《Spring之22:DefaultListableBeanFactory》
DefaultListableBeanFactory包含了Ioc容器的重要内容,很多容器都會用的它。如AbstractApplicationContext.refersh()方法就會銷毀内部的容器并重新建立一個DefaultListableBeanFactory作為起内部表示。DefaultListableBeanFactory則直接繼承它成為從XML讀取資源的Ioc容器。
在DefaultListableBeanFactory有一個ConcurrentHashMap儲存了Bean的定義。
另外附上DefaultListableBeanFactory的層級結構圖:
23.AbstractAutowireCapableBeanFactory:
24.AbstractBeanFactory:除了BeanFactory這一支的接口,AbstractBeanFactory主要實作了AliasRegistry和SingletonBeanRegistry接口,這邊主要提供了這樣的三個功能: 别名管理,單例建立與注冊,工廠方法FactoryBean支援.
24.FactoryBeanRegistrySupport:
25.DefaultSingletonBeanRegistry:--《Spring之25:SingletonBeanRegistry&DefaultSingletonBeanRegistry》
26.SingletonBeanRegistry:
27.BeanDefinitionRegistry:--《Spring之27:BeanDefinitionRegistry》
28.AliasRegistry、SimpleAliasRegistry:Spring Bean的别名管理--《Spring之28:AliasRegistry&SimpleAliasRegistry》
Ⅰ.BeanDefnition:BeanDefinition描述一個bean執行個體,這個bean執行個體包含了屬性值,構造函數的參數值,以及由具體實作提供額進一步資訊。--見《Spring之Ⅰ:BeanDefinition》