標籤:

1.2淺談spring(從源碼出發)

1.2淺談spring(從源碼出發)

來自專欄小白 ON THE WAY

時隔很多天的我又回來....最近發展了一下自己的愛好,所以拖了很長時間。

前面我們從概念性上分析了spring的特性

這裡我們附上Spring框架的結構圖

我們簡單的來說一些這個框架圖

我們從下往上看

1.測試部分Test

Spring提供的測試部分非常重要,這個SpringTest可以幫助我們在伺服器上完成測試(即不用每次都重啟伺服器去測試),跟Junit的測試一樣。而且這個SpringTest是可以配合Junit使用的。

2.Spring的核心部分

這裡有4個部分 Beans Core Context ExpressionLanguage

Beans 是關於創建Bean和管理Bean的一些類

Core 部分就不多說了,一般核心部分都是最底層的東西

Context 負責上下文的一些類

ExpressionLanguage EL表達式。跟Struts2的OGNL表達式類似

3.AOP,Aspects

這個部分的Instrumentation我沒用過,看到的也很少,所以這裡就不提了。歡迎評論區補充。這層是切面層。關於AOP,Aspects這裡不再做過多的解釋了

4.WEB層

主要是關聯一些其他的框架,如Struts,SpringMVC,還有一些遠程調用。

5.Data Access層

這部分是事務管理和數據源部分。spring有自己的jdbc模版,jdbcTemplate。同樣Spring也為其他ORM框架提供了交互層,如:Hibernate,Mybatis,JPA等

IOC是如何工作的呢?

這就是本章我們要研究的問題

1.spring容器

前面我們講了SpringIOC容器的概念。現在我們通過源碼來看一下,SpringIOC容器是什麼。

Spring的容器並不是只有一個,Spring自帶了多個容器實現,大致可以分為兩類

①BeanFactory,提供最基本的DI功能

圖1.1 beanFactory的方法

再看一下它的基本實現類

②應用上下文ApplicationContext,它是基於BeanFactory。除了支持基本的DI功能,還支持從屬性文件解析文本,以及發布事件給事件監聽者,該介面繼承多個其他的介面。

圖1.2-1 Application介面

我們常用的幾個Spring容器的具體實現有:

1.ClassPathXmlApplicationContext

2.FileSystemXmlApplicationContext

這兩個是我們在本地引用xml配置文件時用的IOC容器,web的IOC容器我們在後面討論。這個小節我們討論IOC容器的具體工作。

Spring載入bean通常稱為裝配,以下是其中一種模式(XML顯示裝配)

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");Car car =app.getBean(Car.class);System.out.println(car.getBrand()+","+car.getDesc());

以上一段代碼包含以下幾點:

1.讀取配置文件beans.xml

2.根據beans.xml中的配置,找到對應的類的配置並實例化

3.調用實例化後的實例。

實際這3步里執行了多少邏輯對我們是透明的,這幾步也許就是它的原理了..

藍色顏色標註的為相同的(因為線確實扯不過來....),紅色的為基本的常用的Spring容器

這是spring的IOC容器的體系結構,了解一下。下一節,來了解IOC容器是如何初始化的。

推薦閱讀:

Springmvc之向JSP頁面轉發數據(request)
Rabbitmq系列之4--Springboot延遲隊列實現
CVE-2018-1270:spring-messaging遠程代碼執行漏洞分析預警
Preparation for upcoming Chinese Spring Festival

TAG:源代碼 | Spring |