Spring核心組件剖析

簡介

Spring框架現在已成爲服務端開發框架中的主流框架之一,是web開發者的利器。然而,真正讓人着迷的,仍是與其實現相關的 原理,設計模式以及許多工程化的思想。本文主要探討Spring的三大核心組件web

Spring的核心組件有不少,但真正構成其骨骼的,是Core,Context和Beanspring

Bean

三者之中,Bean是核心中的核心。Bean實現了將對象經過配置文件的方式,由Spring來管理對象存儲空間,生命週期的分配。經過依賴注入的方式,能夠實現將對象注入到指定的業務邏輯類中。這些注入關係,由Ioc容器來管理。編程

所以,Spring的核心思想經常被稱做BOP(Bean Oriented Programming),面向Bean編程。設計模式

Bean組件定義在Spring的org.springframework.beans包下,解決了如下幾個問題:架構

  1. Bean的定義框架

  2. Bean的建立工具

  3. Bean的解析spa

使用者只須要關注Bean的建立,其餘兩個過程由Spring內部完成。設計

image

1.總體架構

Spring Bean的總體架構是典型的工廠模式,最上層的接口是BeanFactory。ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBean是其子類,目的是爲了區分Spring內部對象處理和轉化的數據限制對象

  • ListableBeanFactory: 表示這些Bean是可列表的

  • HierarchicalBeanFactory: 表示這些Bean有繼承關係

  • AutowireCapableBeanFactory: 定義Bean的自動裝配規則

這幾個接口分別定義了Bean的集合、Bean的關係和Bean的行爲。

2.Bean定義

Bean的定義主要由BeanDefinition描述,層次關係以下:

image

Spring的配置文件中定義的<bean/>節點,成功解析後都會被轉化爲BeanDefinition對象,以後全部的操做都會在BeanDefinition對象之上進行。

3.Bean解析

Bean解析的主要任務是:對Spring的配置文件進行解析,最後生成BeanDefinition對象。
解析過程很是複雜,包括配置文件裏全部的tag。主要參與的類以下:

image

Context

Bean包裝的是一個個Object,Object中存儲着業務所需的數據。因此,如何給這些數據及之間的關係提供生存、運行環境(即保存對象的狀態),就是Context要解決的問題。Context實際上就是Bean關係的集合,又稱之爲Ioc容器

ApplicationContext是Context最上層的接口,層次關係以下:

image

ApplicationContext可以標識一個應用環境的基本信息。其上繼承了5個接口,用於拓展Context的功能,其中BeanFactory用於建立Bean,同時繼承了ResourceLoader接口,用於訪問任何外部資源。

ApplicationContext的子類,主要包括:

  1. ConfigurableApplicationContext: 用戶可動態配置修改信息的Context,其下AbstractRefreshableApplicationContext最爲經常使用。

  2. WebApplicationContext:
    爲Web應用準備的Context,能夠直接訪問ServletContext。

總之,ApplicationContext必須完成的功能以下:

  • 標識一個應用環境

  • 利用BeanFactory建立Bean對象

  • 保存對象關係表

  • 捕獲各類事件

做爲Ioc容器,Context是Spring其餘大部分功能的基礎

Core

Spring 發現、創建和維護Bean之間關係的一攬子工具,稱之爲Core。實際上就是所需的Util。

Core的重要組成部分之一是Resource

1. Resource總體層次

Resource主要定義了資源的訪問方式,全部資源都抽象到了Resource接口中,層次關係以下:

image

  • 資源包裝。Resource向上繼承了InputStreamSource接口,全部的資源都經過InputStream來獲取,從而屏蔽了資源提供者。

  • 資源加載。Resource下的ResourceLoader接口,全部資源加載者統一實現該接口就能加載全部的資源,例如以前的ApplicationContext。

2. 與Context創建關係

image

如圖,ApplicationContext經過ResourcePatternResolver接口與ResourceLoader進行交互,來進行資源的加載、解析和描述。ResourcePatternResolver將資源封裝整合,便於其餘組件使用。

總結


本文主要總結了構成Spring骨骼框架的三大核心組件及其之間的聯繫,以及對三者實現原理理解的一些心得體會。


做者: I'm coding

連接ACFLOOD

著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

若是您以爲本文對您有所幫助,就給俺點個贊吧!

參考書籍:《深刻分析Java Web技術內幕》(許令波)

圖片來源:《深刻分析Java Web技術內幕》(許令波)

相關文章
相關標籤/搜索