Spring框架學習記錄(1)
一、
http://www.rzrgm.cn/yuanqinnan/p/10274934.html
(一)只要用框架開發java,一定躲不過spring,Spring是一個輕量級的Java開源框架,存在的目的是用于構建輕量級的J2EE應用。Spring的核心是控制反轉(IOC)和面向切面編程(AOP)。spring有如下特點:
1、輕量級:應用大小和應用開支,包括應用方式
2、DI/IoC:提供松耦合的一種實現技術
3、AOP:切面編程將業務邏輯從應用服務中分離
4、容器:包含并管理應用對象的生命周期和配置
5、框架:使用組件配置組合成復雜的應用,并提供很多基礎功能
由于spring是一個容器型的框架,所以它不排斥其他框架,并且可以輕松的整合其他框架。
Spring以一種非侵入式的方式來管理你的代碼,Spring提倡”最少侵入”,這也就意味著你可以適當的時候安裝或卸載Spring 。
(二)Spring框架大約由20多個小模塊組成,這些模塊分為:核心容器,數據訪問/集成,Web,面向切面編程(AOP),消息和測試等等,如下圖所示
下面逐一介紹這幾大模塊:
1.核心容器:核心容器包括spring-core, spring-beans,spring-context, spring-context-support, 和spring-express,其中spring-core和spring-beans模塊提供框架的基礎部分,包括控制反轉和依賴注入。BeanFactory是一個復雜的工廠模式的實現。上下文(spring-context)模塊建立在Core和Bean模塊的基礎之上:它提供了一種框架風格來訪問對象,類似于JNDI注冊表。Context模塊繼承了Bean模塊的特點并增加了對國際化、事件傳播、資源加載等的支持。ApplicationContext接口是Context模塊的焦點。spring-context-support支持將第三方庫集成到Spring應用中,例如緩存,JavaMail、模板引擎等。spring-expression模塊為運行時查詢和操作對象提供了強大的表達式語言,它是JSP2.1中的EL語言的擴展,這種語言支持設置和獲取屬性值,屬性賦值,方法調用,訪問數組,邏輯和算術運算符,還支持列表投影、選擇和常見的聚合。
2.面向切面:Spring的AOP封裝包提供了符合AOP Alliance規范的面向切面的編程實現,讓你可以定義,例如方法攔截器和切點,從邏輯上講,從而減弱代碼的功能耦合,清晰的被分離開。
3.消息傳送:Spring FrameWork 4包括一個spring-messaging模塊,它是從Spring集成項目的關鍵抽象,如Message, MessageChannel,MessageHandle。該模塊該包含一組注釋映射消息的方法,類似Spring MVC基于注釋的編程模型。
4.數據訪問/集成:這一層包括JDBC、ORM、OXM、JMS和事務模塊。spring-jdbc模塊提供了一個JDBC抽象層從而消除了令人乏味的JDBC編程和解析數據庫提供商特定的錯誤。spring-tx模塊支持類的編程和聲明式事務管理,實現特殊的接口和你的POJO(Plain Old Java Objects)。spring-orm模塊提供了流行的對象-關系映射集成層API,包括JPA、JDO和Hibernate。使用spring-orm模塊可以使這ORM框架結合Spring提供的其他特性,比如前面提到的簡單的聲明式事務管理。spring-oxm模塊提供了一個抽象層,支持對象/XML映射的實現,如JAXB、 Castor、XMLBeans、 JiBX和XStream。
5.網絡層:包括spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模塊。spring-web模塊提供基礎的針對web開發的集成特性,包括文件上傳功能、利用Servlet偵聽器進行IOC容器初始化和針對web的應用上下文。它還包括一個HTTP客戶端和Spring的web部件的遠程支持。spring-webmvc模塊包括Spring的MVC模型和REST Web服務實現的web應用程序,Spring的MVC框架提供了一種清晰的分離模型,在領域模型代碼和web form之間,并且還可以借助Spring框架的其他特性。
6.測試層:spring-test模塊支持單元測試和包含Junit或者TestNG的集成測試,它提供了Spring的ApplicationContext一致性裝載和這些上下文的緩存機制,它還提供了可用于測試代碼隔離的模擬對象。
淺談控制反轉:
我們首先先來了解一下控制二字,也就是在控制“正”轉的情況下,在任何一個有請求作用的系統當中,至少需要有兩個類互相配合工作,在一個入口類下使用new關鍵字創建另一個類的對象實例,這就好比在面向對象編程的思想下,“我“充當一個入口類,在這個入口類中,我每次吃飯的時候都要買一雙一次性筷子(每一次使用都要new一次),在這樣的關系下,是”我“(即調用者)每次都要”主動“去買一次性筷子(另一個類),我對筷子說你老老實實的過來我的手上,是我控制了筷子,那好,在這種控制正轉的關系下,放在現實生活當中,肯定是不現實的,而且人是懶惰的,他總會去創造出更加方便自己生活的想法,更確切的做法是,買一雙普通的筷子(非一次性),把他放在一個容器當中(在Spring中叫做IOC容器),你需要使用的時候就對容器說:IOC我想要用筷子(向容器發出請求),接著筷子就會”注入“到的手上,而在這個過程當中,你不再是控制方,反而演變成一名請求者(雖然本身還是調用者),依賴于容器給予你資源,控制權坐落到了容器身上,于是這就是人們俗稱的控制反轉。
初涉依賴注入:
同樣接著上面的例子,在控制反轉的統一下,筷子是怎么來到我的手上(即我們是如何獲得請求的類),這就是一個依賴注入的過程。
再談IOC與DI
設計原則中好萊塢原則描述到,“別找我們,我們找你”,百度百科上對這點描述是“不要給我們打電話,我們會給你打電話(don‘t call us, we‘ll call you)”這是著名的好萊塢原則。在好萊塢,把簡歷遞交給演藝公司后就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員只能被動式的接受公司的差使,在需要的環節中,完成自己的演出。這一點完美的提現了在IOC身上,IOC所注重的是設計思想上,從一個常規的創建對象的做法,即new一個對象,轉變成向IOC容器遞交”簡歷“,被動的等待IOC容器返回資源給你。控制反轉即指的是”演藝公司控制演員“,而說到依賴,則是“演員需要公司混飯”,我們所需求的對象,需要依賴容器來獲得,這個過程即是依賴注入。本質上IOC和DI是同一思想下不同維度的表現。
浙公網安備 33010602011771號