官术网_书友最值得收藏!

2.1 Spring框架介紹

本節(jié)主要對(duì)Spring框架進(jìn)行簡(jiǎn)單介紹,了解框架起源、框架組成結(jié)構(gòu),對(duì)Spring框架有一個(gè)大概的認(rèn)識(shí)。

2.1.1 起源

首先,追根溯源,了解它是怎么來的。在Spring框架出現(xiàn)之前,使用EJB開發(fā)J2EE應(yīng)用可沒那么容易。EJB要嚴(yán)格地實(shí)現(xiàn)各種不同類型的接口,代碼復(fù)用性低,配置也比較復(fù)雜和單調(diào),同樣使用JNDI進(jìn)行對(duì)象查找的代碼也是單調(diào)而枯燥,而且EJB不容易學(xué),開發(fā)效率低。Spring出現(xiàn)的初衷就是為了解決類似的這些問題。

Spring最大的目的之一就是使J2EE開發(fā)更加容易。同時(shí),Spring不僅僅是一個(gè)單層的框架,而是類似一個(gè)平臺(tái)或者生態(tài)體系。在這個(gè)平臺(tái)或者生態(tài)體系中,可以將Struts、Hibernate等單層框架最佳的方式融合在一起,為企業(yè)級(jí)應(yīng)用提供完美的解決方案。Spring的形成,最初來自Rod Jahnson所著的一本很有影響力的圖書《Expert One-on-One J2EE Design and Development》(出版于2002年),就是在這本書中第一次出現(xiàn)了Spring的一些核心思想。另外,《Expert One-on-One J2EE Development without EJB》更進(jìn)一步地闡述了在不使用EJB開發(fā)J2EE企業(yè)級(jí)應(yīng)用的一些設(shè)計(jì)思想和具體的做法。

2.1.2 簡(jiǎn)介

了解了Spring框架的起源之后,下面來了解一下Spring到底是什么。用一句話概括,Spring就是一個(gè)開源的輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。下面來分析一下這句話。

(1)開源:因?yàn)殚_源、免費(fèi),用戶無須經(jīng)過任何人同意即可修改代碼,可控制性強(qiáng),不受他人限制。

(2)輕量級(jí):從大小與開銷兩方面而言,Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布,并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

(3)控制反轉(zhuǎn):軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚度作為衡量模塊獨(dú)立程度的標(biāo)準(zhǔn),劃分模塊的一個(gè)準(zhǔn)則就是高內(nèi)聚低耦合,Spring通過控制反轉(zhuǎn)技術(shù)降低了耦合度。

(4)面向切片:Spring支持面向切片的編程,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開發(fā),應(yīng)用對(duì)象只需實(shí)現(xiàn)業(yè)務(wù)邏輯,它們并不負(fù)責(zé)(甚至是意識(shí))其他系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

(5)容器:容器就是用來裝東西的。Spring容器包含并管理應(yīng)用對(duì)象的配置和生命周期。

(6)框架:Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用,相當(dāng)于是一個(gè)腳手架,開發(fā)者要做的就是把組件放進(jìn)去,實(shí)現(xiàn)業(yè)務(wù)邏輯。

2.1.3 框架結(jié)構(gòu)

Spring框架結(jié)構(gòu)如圖2-1所示。

圖2-1

Spring由20多個(gè)模塊組成,可以分為核心容器(Core Container)、數(shù)據(jù)訪問/集成(Data Access/Integration)、Web、面向切面編程(AOP,Aspect Oriented Programming)、設(shè)備(Instrumentation)、消息發(fā)送(Messaging)和測(cè)試(Test)。

1.核心容器

核心容器包含spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language)這些模塊。

spring-core和spring-beans構(gòu)成了框架最基礎(chǔ)的部分,包括控制反轉(zhuǎn)和依賴注入功能。

spring-context是基于spring-core和spring-beans構(gòu)建的,提供了一種以框架風(fēng)格來訪問對(duì)象的方式,類似于JNDI注冊(cè)。ApplicationContext接口是spring-context的焦點(diǎn)。

spring-context-support為集成第三方庫(kù)(如定時(shí)器Quartz)提供支持。

spring-expression提供了一種強(qiáng)大的表達(dá)式語言,可以在運(yùn)行時(shí)查詢和操作對(duì)象。

2.AOP

spring-aop模塊提供了一個(gè)AOP面向切面編程的實(shí)現(xiàn)。

spring-aspects模塊提供與AspectJ的集成。

spring-instrument模塊提供一些類級(jí)的工具支持和ClassLoader級(jí)的實(shí)現(xiàn),用于服務(wù)器。spring-instrument-tomcat模塊針對(duì)tomcat的instrument實(shí)現(xiàn)。

3.消息發(fā)送

從Spring 4開始包含了一個(gè)spring-messaging模塊,對(duì)Spring集成項(xiàng)目Message、MessageChannel和MessageHandler進(jìn)行了重要的抽象,是基于消息發(fā)送應(yīng)用的基礎(chǔ)。

4.?dāng)?shù)據(jù)訪問/集成

數(shù)據(jù)訪問/集成層包含JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和事務(wù)(spring-tx)模塊。

5.Web

Web層包含spring-web、spring-webmvc、spring-websocket和spring-webflux模塊。其中,spring-web提供了面向Web集成的基本特性,比如文件上傳功能。Spring-webmvc模塊包含了Spring的MVC和REST Web Service實(shí)現(xiàn)。spring-webflux是一個(gè)新的非堵塞函數(shù)式Reactive Web框架,可以用來建立異步的、非阻塞、事件驅(qū)動(dòng)的服務(wù),并且擴(kuò)展性非常好。

6.測(cè)試

Spring-test模塊支持Spring組建JUnit和TestNG的單元測(cè)試和集成測(cè)試。

主站蜘蛛池模板: 定南县| 牡丹江市| 新昌县| 长丰县| 竹溪县| 平果县| 渝北区| 祁门县| 星子县| 青田县| 札达县| 洞头县| 古蔺县| 城固县| 象州县| 沾益县| 莫力| 客服| 赤壁市| SHOW| 云和县| 西青区| 灵寿县| 元阳县| 池州市| 永宁县| 枣庄市| 乌兰县| 卢氏县| 贞丰县| 上犹县| 比如县| 鸡东县| 顺昌县| 临沂市| 阜阳市| 东乌珠穆沁旗| 翁源县| 泰州市| 潮安县| 汝阳县|