什麼是框架?框架解決的是什麼問題?
web
編程有一個準則,Don't Repeat Yourself(不要重複你的代碼),因此咱們會將重複的代碼抽取出來,封裝到方法中;若是封裝的方法過多,將將這些方法封裝成工具類;若是工具類造成了規模,就整合成類庫。類庫更加系統,功能更加齊全。既然別人已經造好了輪子,咱們爲何還有閉門造車呢,直接把造好的輪子拿來用就好了。這就有了框架的誕生。 spring
框架就是一個半成品組件,將底層的代碼,重複的代碼封裝,暴露接口給用戶使用。讓用戶只關心業務邏輯功能,並不須要關注底層代碼的實現,在必定程度上簡化了開發,提升軟件開發的效率。編程
一:首先了解Spring的架構圖設計模式
圖中能夠看出,spring的三個核心組件是:core bean,context,下面就每個組件進行詳細的介紹。數據結構
二:那麼spring到底解決的是什麼問題呢?架構
spring解決的是將對象之間的依賴關係交由配置文件統一管理,也就是依賴注入機制,注入關係在IOC容器中管理。IOC又是什麼呢?就是bean包裝的對象。spring就是經過bean完成對這些對象的管理以及一些額外的功能目的。spring的設計策略和Java中的OOP類似,可是較之複雜的多。首先建立一系列數據結構,而後根據數據結構設計生存環境,讓數據結構在生存環境中不停的運動,在運動的過程當中與環境或者其餘個體完成信息交換。其餘的框架用到的都是這樣的設計準則。框架
三:各個組件之間如何協同工做?工具
Bean包裝的是Object對象,而Object對象中保存的是數據,而後Context爲這些數據提供生存環境。對於Context來講就是發現每一個Bean之間的關係,而且創建和維護這種關係。因此說Context就是Bean對象的集合,這個集合就是IOC容器,一旦創建IOC容器,就可讓spring爲咱們工做了。而Core就是完成這一系列工做(查找bean對象之間的關係,而後創建並進行維護)所須要的工具。簡單說就是Utilspa
四:下面詳細介紹各個組件設計
一、Bean組件:bean組件是位於spring的Beans包下面。完成的主要功能是:Bean定義。Bean解析,Bean的建立。咱們只須要關注Bean的建立,另外兩個spring框架已經自動完成了。Bean的建立是典型的工廠模式
Bean的定義的類層次結構圖:
Bean的解析過程十分複雜。由上面的類層次結構圖也能夠看出,同時每一個bean解析也被劃分的十分細。bean的解析就是spring配置文件的解析。
2.Context組件:主要是提供Bean的運行環境。保證各個對象之間的狀態。做爲Spring容器的IOC容器,整合了spring的大部分功能。
ApplicationContext是Context的頂級父類。要完成的工做:(1)表示一個應用環境 (2)調用BeanFactory建立Bean對象(3)保存對象關係表(4)捕獲各類事件
ApplicationContext的子類主要包括兩個方面。
3.Core組件:Core做爲spring的核心,一個重要組成部分就是定義了資源的訪問方式。巧妙之處就在於:將全部的資源抽象成一個接口的設計模式
五:spring之IOC容器的實現過程
IOC容器中做爲管理bean關係的容器,究竟是如何工做的呢?
1.建立BeanFactory工廠
2.註冊感興趣的事件
3.建立Bean實例對象 是在finishBeanFactoryInitiallization中開始的。
4.觸發被監聽的事件
六:spring之AOP
spring的AOP的實現依賴動態代理技術,首先介紹動態代理,建立代理對象的源碼
spring中的Aop到底如何實現的?
依賴動態代理,代理的目的是調用目標方法是能夠轉爲調用InvokeHandler中的invoke方法,spring的aop遵循aop聯盟,在此基礎上有進行了拓展,增長了pointcut和advisor等一些接口使得使用更加靈活。
spring中代理模式的使用
關於spring的底層實現原理就更新到這裏。錯誤的地方請多指正。
個人博客即將搬運同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=37c7e7zxm36ss