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功能
再看一下它的基本實現類
②應用上下文ApplicationContext,它是基於BeanFactory。除了支持基本的DI功能,還支持從屬性文件解析文本,以及發布事件給事件監聽者,該介面繼承多個其他的介面。
我們常用的幾個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