spirng底層實現原理

  什麼是框架?框架解決的是什麼問題?
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的子類主要包括兩個方面。

  1. ConfigurableApplicationContext:表示能夠修改Context,在建立Context對象時,用戶能夠動態的修改或者添加配置文件的信息。
  2. WebApplicationContext:能夠直接訪問ServletContext對象,是專門爲web準備的Context

  

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

相關文章
相關標籤/搜索