「Spring專題」3、深入源碼了解IoC的設計(知其然 知其所以然)

在Spring IoC中,我們可以看到兩個主要的容器系列,一個是實現BeanFactory接口的簡單容器系列,另一個是ApplicationContext應用上下文。以下就是主要接口的設計。

「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)

IoC容器的接口設計圖

下面我們仔細分析一下每一條線路。

1、BeanFactory->HierarchicalBeanFactory->ConfigurableBeanFactory

BeanFactory:定義了基本的IoC容器的規範。下面是BeanFactory的所有功能。我已經標註上了註釋。

「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)

HierarchicalBeanFactory:繼承了BeanFactory之後,增加了getParentBeanFactory()的接口功能,使其具備了雙親IoC容器的管理功能。

「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)

ConfigurableBeanFactory:主要增加了許多的配置功能。

「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)

2、BeanFactory->ListableBeanFactory->ApplicationContext->WebApplicationContext或者ConfigurableApplicationContext

ListableBeanFactory: 提供容器中bean迭代的功能,不再需要一個個bean地查找.比如可以一次獲取全部的bean,在SpringMVC中,掃描包路徑下的具體實現策略就是使用的這種方式(那邊使用的是BeanFactoryUtils封裝的api)。注意:getBeanDefinitionCount和containsBeanDefinition的實現方法因為效率比較低,還是少用為好.

「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)

ApplicationContext:ApplicationContext接口繼承眾多接口,集眾多接口功能與一身,為Spring的運行提供基本的功能支撐。根據程序設計的“單一職責原則”,其實每個較頂層接口都是“單一職責的”,只提供某一方面的功能,而ApplicationContext接口繼承了眾多接口,相當於擁有了眾多接口的功能,下面看看它的主要功能:

  • 首先,它是個BeanFactory,可以管理、裝配bean,可以有父級BeanFactory實現Bean的層級管理(具體到這裡來說它可以有父級的ApplicationContext,因為ApplicationContext本身就是一個BeanFactory。這在web項目中很有用,可以使每個Servlet具有其獨立的context, 所有Servlet共享一個父級的context),它還是Listable的,可以枚舉出所管理的bean對象。
  • 其次,它是一個ResourceLoader,可以加載資源文件;
  • 再次,它可以管理一些Message實現國際化等功能;
  • 還有,它可以發佈事件給註冊的Listener,實現監聽機制。
「Spring專題」3、深入源碼瞭解IoC的設計(知其然 知其所以然)


分享到:


相關文章: