在Spring IoC中,我們可以看到兩個主要的容器系列,一個是實現BeanFactory接口的簡單容器系列,另一個是ApplicationContext應用上下文。以下就是主要接口的設計。
下面我們仔細分析一下每一條線路。
1、BeanFactory->HierarchicalBeanFactory->ConfigurableBeanFactory
BeanFactory:定義了基本的IoC容器的規範。下面是BeanFactory的所有功能。我已經標註上了註釋。
HierarchicalBeanFactory:繼承了BeanFactory之後,增加了getParentBeanFactory()的接口功能,使其具備了雙親IoC容器的管理功能。
ConfigurableBeanFactory:主要增加了許多的配置功能。
2、BeanFactory->ListableBeanFactory->ApplicationContext->WebApplicationContext或者ConfigurableApplicationContext
ListableBeanFactory: 提供容器中bean迭代的功能,不再需要一個個bean地查找.比如可以一次獲取全部的bean,在SpringMVC中,掃描包路徑下的具體實現策略就是使用的這種方式(那邊使用的是BeanFactoryUtils封裝的api)。注意:getBeanDefinitionCount和containsBeanDefinition的實現方法因為效率比較低,還是少用為好.
ApplicationContext:ApplicationContext接口繼承眾多接口,集眾多接口功能與一身,為Spring的運行提供基本的功能支撐。根據程序設計的“單一職責原則”,其實每個較頂層接口都是“單一職責的”,只提供某一方面的功能,而ApplicationContext接口繼承了眾多接口,相當於擁有了眾多接口的功能,下面看看它的主要功能:
- 首先,它是個BeanFactory,可以管理、裝配bean,可以有父級BeanFactory實現Bean的層級管理(具體到這裡來說它可以有父級的ApplicationContext,因為ApplicationContext本身就是一個BeanFactory。這在web項目中很有用,可以使每個Servlet具有其獨立的context, 所有Servlet共享一個父級的context),它還是Listable的,可以枚舉出所管理的bean對象。
- 其次,它是一個ResourceLoader,可以加載資源文件;
- 再次,它可以管理一些Message實現國際化等功能;
- 還有,它可以發佈事件給註冊的Listener,實現監聽機制。
閱讀更多 小馬學編程 的文章