1. Spring概述
本章主要介紹Spring中的體系結構和常見概念,比如bean、控制反轉(Inverse of Control,IoC)等。
1.1 體系結構
Spring 框架提供約 20 個模塊,可以根據應用程序的要求來使用。
核心容器
核心容器由核心,Bean,上下文和表達式語言模塊組成,它們的細節如下:
核心模塊提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
Bean模塊提供 BeanFactory,它是一個工廠模式的複雜實現。
上下文模塊建立在由核心和 Bean 模塊提供的堅實基礎上,它是訪問定義和配置的任何對象的媒介。ApplicationContext 接口是上下文模塊的重點。
表達式語言模塊在運行時提供了查詢和操作一個對象圖的強大的表達式語言。
數據訪問/集成
數據訪問/集成層包括 JDBC,ORM,OXM,JMS 和事務處理模塊,它們的細節如下:
JDBC 模塊提供了刪除冗餘的 JDBC 相關編碼的 JDBC 抽象層。
ORM 模塊爲流行的對象關係映射 API,包括 JPA,JDO,Hibernate 和 iBatis,提供了集成層。
OXM 模塊提供了抽象層,它支持對 JAXB,Castor,XMLBeans,JiBX 和 XStream 的對象/XML 映射實現。
Java 消息服務 JMS 模塊包含生產和消費的信息的功能。
事務模塊爲實現特殊接口的類及所有的 POJO 支持編程式和聲明式事務管理。
Web
Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:
- Web 模塊提供了基本的面向 web 的集成功能,例如多個文件上傳的功能和使用 servlet 監聽器和麪向 web 應用程序的上下文來初始化 IoC 容器。
- Web-MVC 模塊包含 Spring 的模型-視圖-控制器(MVC),實現了 web 應用程序。
- Web-Socket 模塊爲 WebSocket-based 提供了支持,而且在 web 應用程序中提供了客戶端和服務器端之間通信的兩種方式。
- Web-Portlet 模塊提供了在 portlet 環境中實現 MVC,並且反映了 Web-Servlet 模塊的功能。
其他
還有其他一些重要的模塊,像 AOP,Aspects,Instrumentation,Web 和測試模塊,它們的細節如下:
- AOP 模塊提供了面向方面的編程實現,允許你定義方法攔截器和切入點對代碼進行乾淨地解耦,它實現了應該分離的功能。
- Aspects 模塊提供了與 AspectJ 的集成,這是一個功能強大且成熟的面向切面編程(AOP)框架。
- Instrumentation 模塊在一定的應用服務器中提供了類 instrumentation 的支持和類加載器的實現。
- Messaging 模塊爲 STOMP 提供了支持作爲在應用程序中 WebSocket 子協議的使用。它也支持一個註解編程模型,它是爲了選路和處理來自 WebSocket 客戶端的 STOMP 信息。
- 測試模塊支持對具有 JUnit 或 TestNG 框架的 Spring 組件的測試。
1.2 Bean
Spring對Bean的官方定義如下:
在 Spring 中,構成應用程序主幹並由Spring IoC容器管理的對象稱爲bean。bean是一個由Spring IoC容器實例化、組裝和管理的對象。
由上面的定義可以得到如下3點信息:
- bean是對象,一個或者多個不限定。
- bean由Spring IoC容器管理。
- 應用程序由一個個bean構成。
1.3 控制反轉(IoC)與依賴注入(DI)
控制反轉英文全稱:Inversion of Control,簡稱就是IoC,這是管理Java實例協作關係的一種方式。這種方式還有另一個名稱,依賴注入(Dependency Injection),兩者的含義相同。
傳統方式下,當某個Java對象(調用者)需要調用另一個Java對象(被依賴對象)的方法時,通常有如下兩種做法:
- 原始做法: 調用者主動創建被依賴對象,然後再調用被依賴對象的方法。
- 簡單工廠模式: 調用者先找到被依賴對象的工廠,然後主動通過工廠去獲取被依賴對象,最後再調用被依賴對象的方法。
注意上面的主動二字,這必然會導致調用者與被依賴對象實現類的硬編碼耦合,非常不利於項目升級的維護。
使用Spring框架之後,調用者無需主動獲取被依賴對象,調用者只要被動接受Spring容器爲調用者的成員變量賦值即可,由此可見,使用Spring後,調用者獲取被依賴對象的方式由原來的主動獲取,變成了被動接受——所以Rod Johnson(Spring框架創始人)稱之爲控制反轉。
另外從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量——相當於爲調用者注入它依賴的實例,因此Martine Fowler稱之爲依賴注入。
Spring IoC容器就是這樣的輔助程序,它負責對象的生成和依賴的注入。類的實例化、依賴的實例化、依賴的傳入都交由Spring IoC容器控制,而不是用new方式實例化對象、通過非構造函數方法傳入依賴等常規方式。
1.4 Bean的管理
在Spring的應用中,Spring容器負責創建對象,裝配對象,配置它們以及管理它們的整個生命週期,從生存到死亡。
容器是Spring框架的核心,Spring自帶了多個容器的實現。可以歸納爲兩種不同的類型:
- BeanFactory(由org.springframework.beans.factory.BeanFactory接口定義)是最簡單的容器,提供基本的DI支持。
- 應用上下文(由org.springframework.context.ApplicationContext接口定義)基於BeanFactory構建,並提供應用框架級別的服務,例如從屬性文件解析文本信息,以及發佈應用事件給感興趣的事件監聽者。
通常情況下,會使用應用上下文來進行Bean的管理。Spring自帶了多種類型的應用上下文,下面列舉了幾種常見的:
上面的上下文可以分爲兩類,加載配置文件和配置類。
- 加載文件
- 加載配置類
本文由『後端精進之路』原創,首發於博客 http://teckee.github.io/ , 轉載請註明出處
搜索『後端精進之路』關注公衆號,立刻獲取最新文章和價值2000元的BATJ精品面試課程。