摘要:本文主要探討的三大核心組件。的核心組件有很多,但真正構成其骨骼的,是,和。因此,的核心思想常常被稱作,面向編程。的重要組成部分之一是。總結本文主要總結了構成骨骼框架的三大核心組件及其之間的聯系,以及對三者實現原理理解的一些心得體會。
簡介Spring框架如今已成為服務端開發框架中的主流框架之一,是web開發者的利器。然而,真正讓人著迷的,還是與其實現相關的 原理,設計模式以及許多工程化的思想。本文主要探討Spring的三大核心組件。
Spring的核心組件有很多,但真正構成其骨骼的,是Core,Context和Bean。
Bean三者之中,Bean是核心中的核心。Bean實現了將對象通過配置文件的方式,由Spring來管理對象存儲空間,生命周期的分配。通過依賴注入的方式,可以實現將對象注入到指定的業務邏輯類中。這些注入關系,由Ioc容器來管理。
因此,Spring的核心思想常常被稱作BOP(Bean Oriented Programming),面向Bean編程。
Bean組件定義在Spring的org.springframework.beans包下,解決了以下幾個問題:
?
Bean的定義
?
?
Bean的創建
?
?
Bean的解析
?
使用者只需要關注Bean的創建,其他兩個過程由Spring內部完成。
1.整體架構Spring Bean的整體架構是典型的工廠模式,最上層的接口是BeanFactory。ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBean是其子類,目的是為了區分Spring內部對象處理和轉化的數據限制。
?
ListableBeanFactory: 表示這些Bean是可列表的
?
?
HierarchicalBeanFactory: 表示這些Bean有繼承關系
?
?
AutowireCapableBeanFactory: 定義Bean的自動裝配規則
?
這幾個接口分別定義了Bean的集合、Bean的關系和Bean的行為。
2.Bean定義Bean的定義主要由BeanDefinition描述,層次關系如下:
Spring的配置文件中定義的
Bean解析的主要任務是:對Spring的配置文件進行解析,最后生成BeanDefinition對象。
解析過程非常復雜,包括配置文件里所有的tag。主要參與的類如下:
Bean包裝的是一個個Object,Object中存儲著業務所需的數據。所以,如何給這些數據及之間的關系提供生存、運行環境(即保存對象的狀態),就是Context要解決的問題。Context實際上就是Bean關系的集合,又稱之為Ioc容器。
ApplicationContext是Context最上層的接口,層次關系如下:
ApplicationContext能夠標識一個應用環境的基本信息。其上繼承了5個接口,用于拓展Context的功能,其中BeanFactory用于創建Bean,同時繼承了ResourceLoader接口,用于訪問任何外部資源。
ApplicationContext的子類,主要包括:
?
ConfigurableApplicationContext: 用戶可動態配置和修改信息的Context,其下AbstractRefreshableApplicationContext最為常用。
?
?
WebApplicationContext:
為Web應用準備的Context,可以直接訪問ServletContext。
?
總之,ApplicationContext必須完成的功能如下:
?
標識一個應用環境
?
?
利用BeanFactory創建Bean對象
?
?
保存對象關系表
?
?
捕獲各種事件
?
作為Ioc容器,Context是Spring其他大部分功能的基礎。
CoreSpring 發現、建立和維護Bean之間關系的一攬子工具,稱之為Core。實際上就是所需的Util。
Core的重要組成部分之一是Resource。
1. Resource整體層次Resource主要定義了資源的訪問方式,所有資源都抽象到了Resource接口中,層次關系如下:
?
資源包裝。Resource向上繼承了InputStreamSource接口,所有的資源都通過InputStream來獲取,從而屏蔽了資源提供者。
?
?
資源加載。Resource下的ResourceLoader接口,所有資源加載者統一實現該接口就能加載所有的資源,例如之前的ApplicationContext。
?
2. 與Context建立關系如圖,ApplicationContext通過ResourcePatternResolver接口與ResourceLoader進行交互,來進行資源的加載、解析和描述。ResourcePatternResolver將資源封裝整合,便于其他組件使用。
總結本文主要總結了構成Spring骨骼框架的三大核心組件及其之間的聯系,以及對三者實現原理理解的一些心得體會。
作者: I"m coding
鏈接:ACFLOOD
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
如果您覺得本文對您有所幫助,就給俺點個贊吧!
參考書籍:《深入分析Java Web技術內幕》(許令波)
圖片來源:《深入分析Java Web技術內幕》(許令波)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65244.html
摘要:不過大多數講解還停留在對功能使用的層面,其底層的很多原理,很多人可能并不知曉。每個線程池里的線程就僅僅用于請求那個服務。 歡迎關注微信公眾號:石杉的架構筆記(id:shishan100) 每日更新!精品技術文章準時送上! 目錄 一、業務場景介紹 二、Spring Cloud核心組件:Eureka 三、Spring Cloud核心組件:Feign 四、Spring Cloud核心組件:R...
摘要:不過大多數講解還停留在對功能使用的層面,其底層的很多原理,很多人可能并不知曉。每個線程池里的線程就僅僅用于請求那個服務。 歡迎關注微信公眾號:石杉的架構筆記(id:shishan100) 每日更新!精品技術文章準時送上! 目錄 一、業務場景介紹 二、Spring Cloud核心組件:Eureka 三、Spring Cloud核心組件:Feign 四、Spring Cloud核心組件:R...
摘要:本文將對核心引擎的源碼進行剖析。在筆者看來,能夠快速迭代的原因首先是來自于每位工程師的辛勤付出。在中,還有一類很有意思的代碼,一般稱之為。筆者有機會將會在之后的系列文章分析其中的典型案例以及在代碼中使用極其頻繁的核心工具。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 ZStack是下一代開源的云計算IaaS(基礎架構即服務)軟件。它...
摘要:本文將對核心引擎的源碼進行剖析。在筆者看來,能夠快速迭代的原因首先是來自于每位工程師的辛勤付出。在中,還有一類很有意思的代碼,一般稱之為。筆者有機會將會在之后的系列文章分析其中的典型案例以及在代碼中使用極其頻繁的核心工具。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 ZStack是下一代開源的云計算IaaS(基礎架構即服務)軟件。它...
摘要:本文將對核心引擎的源碼進行剖析。在筆者看來,能夠快速迭代的原因首先是來自于每位工程師的辛勤付出。在中,還有一類很有意思的代碼,一般稱之為。筆者有機會將會在之后的系列文章分析其中的典型案例以及在代碼中使用極其頻繁的核心工具。 本文首發于泊浮目的專欄:https://segmentfault.com/blog... 前言 ZStack是下一代開源的云計算IaaS(基礎架構即服務)軟件。它...
閱讀 3048·2021-11-25 09:43
閱讀 1027·2021-11-24 10:22
閱讀 1353·2021-09-22 15:26
閱讀 682·2019-08-30 15:44
閱讀 2463·2019-08-29 16:33
閱讀 3684·2019-08-26 18:42
閱讀 908·2019-08-23 18:07
閱讀 1832·2019-08-23 17:55