- Spring快速入門
- 崔彥威 盧欣欣 王倩
- 1424字
- 2020-06-29 17:30:39
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è)試。
- Learning NServiceBus(Second Edition)
- Google Flutter Mobile Development Quick Start Guide
- LaTeX Cookbook
- What's New in TensorFlow 2.0
- C#程序設(shè)計(jì)實(shí)訓(xùn)指導(dǎo)書
- 垃圾回收的算法與實(shí)現(xiàn)
- NLTK基礎(chǔ)教程:用NLTK和Python庫(kù)構(gòu)建機(jī)器學(xué)習(xí)應(yīng)用
- 算法訓(xùn)練營(yíng):入門篇(全彩版)
- 實(shí)用防銹油配方與制備200例
- C語言程序設(shè)計(jì)教程(第2版)
- INSTANT Sencha Touch
- Learning Linux Binary Analysis
- Hadoop+Spark大數(shù)據(jù)分析實(shí)戰(zhàn)
- 零基礎(chǔ)學(xué)Java(第4版)
- Serverless架構(gòu)