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