spirng底層實現原理


  什么是框架?框架解決的是什么問題?

  編程有一個准則,Don't Repeat Yourself(不要重復你的代碼),所以我們會將重復的代碼抽取出來,封裝到方法中;如果封裝的方法過多,將將這些方法封裝成工具類;如果工具類形成了規模,就整合成類庫。類庫更加系統,功能更加齊全。既然別人已經造好了輪子,我們為什么還有閉門造車呢,直接把造好的輪子拿來用就行了。這就有了框架的誕生。 

 框架就是一個半成品組件,將底層的代碼,重復的代碼封裝,暴露接口給用戶使用。讓用戶只關心業務邏輯功能,並不需要關注底層代碼的實現,在一定程度上簡化了開發,提高軟件開發的效率。

  一:首先了解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對象之間的關系,然后建立並進行維護)所需要的工具。簡單說就是Util

四:下面詳細介紹各個組件

1、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM