Spring Framework--ApplicationComtext(1)簡介

前言

​ 哈哈?是不是很久沒寫博文了?總是各種原因(liyou)導致不寫博文。廢話不多說,騷年還是學習吧。

1 概述

​ Spring這個東西可真大啊,總共將近20個組件,但是知乎大神們告訴我,其中比較核心的組件只有core,context和beans。aop,web等都屬於核心上層的特性功能。爲了適應時代的變化,社會的發展,最近打算就先從context入手,而這裏面,我們又不得不提ApplicationContext。

​ 注:以發文日期最新版github上spring源碼爲基礎進行閱讀,版本號,後期加上。

git地址:

https://github.com/spring-projects/spring-framework.git

1.1 IOC(控制反轉)

​ 實際應用的程序基本上都是由多個類彼此合作來實現業務邏輯,這使得每個對象都需要與其合作的對象的引用。但是這樣的控制就導致了程序的耦合度非常大,不易於複用,更不易於做單元測試。
Martin Flowler 提出了“那些方面的控制被反轉了?”這個問題。他得出的結論是:依賴對象的獲得被反轉了。基於這個結論,他爲控制反轉創造了一個更好的名字:依賴注入。

依賴倒置原則:

  • 高層次的模塊不應該依賴於低層次的模塊,他們都應該依賴於抽象。
    • 抽象不應該依賴於具體實現,具體實現應該依賴於抽象。

依賴倒置也是設計模式六大原則之一。在Spring中IoC容器就是這個模式的載體,它可以通過容器對對象進行管理,在對象生成或初始化時直接將數據注入到需要其依賴的對象中。

1.2 ApplicationContext

​ Spring中容器要分兩類,一類是實現BeanFactory接口的簡單容器系列,這類容器只實現了容器的最基本功能(這個還不太瞭解);另一個是ApplicationContext應用上下文,也就是我們最常用的,項目中的配置文件大多數都是ApplicationContext-xxx.xml,它作爲容器的高級形態而存在。本文將對ApplicationContext進行閱讀講解。

​ 首先看看ApplicationContext的簡略版類圖:ApplicationContext繼承關係簡略類圖

​ 再看看包含方法的接口方法的ApplicationContext類圖:

ApplicationContext繼承關係詳細類圖

​ 從上圖ApplicationContext接口的繼承關係可以看出,它除了容器所需的基本特性外,還有其他許多附加特性,比如國際化的消息訪問、資源訪問、事件傳播、載入多個上下文等。

​ 在這個接口體系中,ListableBeanFactory和HierarchicalBeanFactory兩個接口,連接BeanFactory接口定義和ApplicationConext應用上下文的接口定義。在ListableBeanFactory接口中,細化了許多BeanFactory的接口功能,比如定義了getBeanDefinitionNames()接口方法;對於HierarchicalBeanFactory接口,增加了getParentBeanFactory()的功能,是BeanFactory具備了雙親IoC容器的管理功能,在ConfigurableBeanFactory中主要定義了一些對BeanFactory的配置功能,比如通過setParentBeanFactory()設置雙親IoC容器,通過addBeanPostProcessor()定義了Bean後置處理器等。;對於ApplicationContext接口,它通過繼承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory簡單IoC容器的基礎上添加了許多對高級容器的特性的支持。總體來說 ApplicationContext 必須要完成以下幾件事:

  • 標識一個應用環境
  • 利用BeanFactory 創建Bean 對象
  • 保存對象關係表
  • 能夠捕獲各種事件

下篇博客,將從ClassPathXmlApplicationContext線入手,對上面要做的幾件事,進行詳細解釋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章