1、Spring的簡(jiǎn)介
?文章來源地址http://www.zghlxwxcb.cn/news/detail-428437.html
Spring的英文翻譯為春天,可以說是給Java程序員帶來了春天,因?yàn)樗鼧O大的簡(jiǎn)化了開發(fā)。我得出一個(gè)公式:Spring = 春天 = Java程序員的春天 = 簡(jiǎn)化開發(fā)。最后的簡(jiǎn)化開發(fā)正是Spring框架帶來的最大好處。
?
Spring是一個(gè)開放源代碼的設(shè)計(jì)層面框架,它是于2003 年興起的一個(gè)輕量級(jí)的Java 開發(fā)框架。由Rod Johnson創(chuàng)建,其前身為Interface21框架,后改為了Spring并且正式發(fā)布。Spring是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。它解決的是業(yè)務(wù)邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個(gè)系統(tǒng)應(yīng)用??蚣艿闹饕獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,同時(shí)為 J2EE 應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡(jiǎn)單來說,Spring是一個(gè)分層的JavaSE/EE full-stack(一站式) 輕量級(jí)開源框架。Spring 的理念:不去重新發(fā)明輪子。其核心是控制反轉(zhuǎn)(IOC)和面向切面(AOP)。
?
回到頂部
2、Spring的起源與發(fā)展
在2002年10月,由Rod Johnson 編著的書名為《Expert One-to-One J2EE Design and Development》一書中,對(duì)Java EE 系統(tǒng)框架臃腫、低效、脫離現(xiàn)實(shí)的種種現(xiàn)狀提出了質(zhì)疑,并闡述了 J2EE 使用 EJB 開發(fā)設(shè)計(jì)的優(yōu)點(diǎn)及解決方案,他提出了一個(gè)基于普通 Java 類和依賴注入的更簡(jiǎn)單的解決方案。然后以此書為指導(dǎo)思想,他編寫了interface21框架,這是一個(gè)力圖沖破J2EE傳統(tǒng)開發(fā)的困境,從實(shí)際需求出發(fā),著眼于輕便、靈巧,易于開發(fā)、測(cè)試和部署的輕量級(jí)開發(fā)框架。Spring框架即以interface21框架為基礎(chǔ),經(jīng)過重新設(shè)計(jì),并不斷豐富其內(nèi)涵,于2004年3月24日,發(fā)布了1.0正式版。同年他又推出了一部堪稱經(jīng)典的力作《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變著Java開發(fā)者程序設(shè)計(jì)和開發(fā)的思考方式。在該書中,作者根據(jù)自己多年豐富的實(shí)踐經(jīng)驗(yàn),對(duì)EJB的各種笨重臃腫的結(jié)構(gòu)進(jìn)行了逐一的分析和否定,并分別以簡(jiǎn)潔實(shí)用的方式替換之。至此一戰(zhàn)功成,Rod Johnson成為一個(gè)改變Java世界的大師級(jí)人物。值得注意的是,Rod Johnson是悉尼大學(xué)的博士,然而他的專業(yè)不是計(jì)算機(jī),而是音樂學(xué)。
?
Spring框架自從發(fā)布以來,就得到快速發(fā)展,經(jīng)過時(shí)代的驗(yàn)證,現(xiàn)在已經(jīng)是最受歡迎的企業(yè)級(jí) Java 應(yīng)用程序開發(fā)框架,數(shù)以百萬的來自世界各地的開發(fā)人員使用 Spring 框架來創(chuàng)建性能好、易于測(cè)試、可重用的代碼。從2004發(fā)布的第一個(gè)Spring版本,到現(xiàn)在已經(jīng)更新到第五個(gè)Spring版本了,我們下面來看看各個(gè)版本的變化。
?
image
?
(1) Spring 1.x
?
在2004年3月24日,Spring Framework 1.0 final正式發(fā)布,Spring 1.0當(dāng)時(shí)只包含一個(gè)完整的項(xiàng)目,他把所有的功能都集中在一個(gè)項(xiàng)目中,其中包含了核心的IOC、AOP,同時(shí)也包含了其它的諸多功能,例如:JDBC、Mail、ORM、事務(wù)、定時(shí)任務(wù)、Spring MVC等等。由于Spring超前的眼光和博大的精神,在第一個(gè)版本的時(shí)候已經(jīng)支持了很多第三方的框架,例如:Hibernate、ibatis、模板引擎等。所有自發(fā)布以來,Spring 框架迅速發(fā)展。但是此時(shí)的Spring只支持基于XML的配置。
?
(2) Spring 2.x
?
Spring 2.0 于 2006年10月發(fā)布,到那時(shí),Spring的下載量已經(jīng)超過了 100 萬。Spring 2.0中新增的特性有:具有可擴(kuò)展的 XML 配置功能,用于簡(jiǎn)化 XML 配置,即對(duì)注解的支持,支持了基于注解的配置,支持 Java 5,額外的 IoC 容器擴(kuò)展點(diǎn),支持動(dòng)態(tài)語言(BeanShell)。
?
2007年11月Interface21公司更名為SpringSource。同時(shí)發(fā)布了Spring 2.5。 Spring 2.5中的主要新功能包括支持Java 6 和Java EE 5,支持配置注釋,支持自動(dòng)檢測(cè)和兼容組件的類路徑和OSGi兼容bundle。2007年,SpringSource從benchmark capital獲得了1000萬美元A輪投資。
?
2009年8月,SpringSource以4.2億美元被VMWare收購,SpringSource又在幾周內(nèi)收購了cloud foundry,這是一家云PaaS供應(yīng)商。
?
(3) Spring 3.x
?
Spring 3.0 于2009 年 12 月發(fā)布,此時(shí)的Spring正式托管到GitHub上,我們可以GitHub的網(wǎng)站查看:https://github.com/spring-projects/spring-framework,Spring 3.0 增加許多重要特性,如重組模塊系統(tǒng),支持 Spring 表達(dá)式語言,基于 Java 的 bean 配置(JavaConfig),支持嵌入式數(shù)據(jù)庫(如 HSQL,H2 和 Derby),模型驗(yàn)證/ REST 支持和對(duì) Java EE 的支持。
?
2011年和2012年發(fā)布了許多3.x系列的小版本。2012年7月,Rod Johnson離開了Spring團(tuán)隊(duì)。2013年4月,VMware和EMC通過GE投資創(chuàng)建了一家名為Pivotal的合資企業(yè)。所有的Spring項(xiàng)目都轉(zhuǎn)移到了Pivotal。
?
(4) Spring 4.x
?
2013年12 月,Pivotal 宣布發(fā)布Spring框架4.0。Spring 4.0 是 Spring 框架的一大進(jìn)步,它包含了對(duì)Java 8 的全面支持,支持Lambda表達(dá)式的使用,更高的第三方庫依賴性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),提供了對(duì)@Scheduled和@PropertySource重復(fù)注解的支持,提供了空指針終結(jié)者Optional,對(duì)核心容器進(jìn)行增加:支持泛型的依賴注入、Map的依賴注入、Lazy延遲依賴的注入、List注入、Condition條件注解注入、對(duì)CGLib動(dòng)態(tài)代理類進(jìn)行了增強(qiáng),對(duì)groovy DSL for bean 定義支持,Spring MVC基于Servlet 3.0 開發(fā),并且為了方便Restful開發(fā),引入了新的RestController注解器注解,同時(shí)還增加了一個(gè)AsyncRestTemplate支持Rest客戶端的異步無阻塞請(qǐng)求,對(duì) websockets 的支持以及對(duì)泛型類型的支持作為注入 bean 的限定符。
?
2014 年至 2017 年期間發(fā)布了許多 Spring 框架 4.xx 系列版本。
?
(5) Spring 5.x
?
Spring 5.0于 2017年 9月28日發(fā)布了通用版本 (GA)。Spring 5.0開始支持Java EE 7,同時(shí)兼容JDK9,但是Spring 5的運(yùn)行環(huán)境最低要求是Java8以上,全面支持Servlet 3.1。其中新增的響應(yīng)式編程是 SpringFramework5.0 最重要的特性之一、WebFlux框架(全新的模塊Spring WebFlux用于替代老的 Spring-webmvc)、對(duì)Kotlin也有了更好的支持等等。
?
目前最新的版本如下(https://spring.io/projects/spring-framework#learn):
?
image
?
由于Spring一直在保持更新,而更新的內(nèi)容都是做一些優(yōu)化或者是新增一些特性,之前版本的特性基本都會(huì)保留,所以我們完全可以直接使用最新版本,本系列文章都使用的是Spring5。
?
回到頂部
3、Spring的組成模塊
Spring框架包含的功能大約由20個(gè)小模塊組成。這些模塊按組可分為核心容器(Core Container)、數(shù)據(jù)訪問/集成(Data Access/Integration)、Web、面向切面編程(AOP和Aspects)、設(shè)備(Instrumentation)、消息(Messaging)和測(cè)試(Test)。如下圖所示:
?
image
?
下面對(duì)各個(gè)模塊進(jìn)行詳細(xì)介紹:(這些模塊我們也可以在Spring的GitHub上查看到:https://github.com/spring-projects/spring-framework)
?
(1) 核心容器(Core Container)——Beans、Core、Context、Expression
?
該層由4個(gè)模塊組成:spring-beans spring-core spring-context spring-expression(spring expression Language,SpEl) 。它們對(duì)應(yīng)的jar包如下:
?
spring-core:該模塊是依賴注入IoC與DI的最基本實(shí)現(xiàn)。
spring-beans:該模塊是Bean工廠與bean的裝配。
spring-context:該模塊構(gòu)架于核心模塊之上,它擴(kuò)展了 BeanFactory,為它添加了 Bean 生命周期控制、框架事件體系以及資源加載透明化等功能。ApplicationContext 是該模塊的核心接口,它的超類是 BeanFactory。與BeanFactory 不同,ApplicationContext 容器實(shí)例化后會(huì)自動(dòng)對(duì)所有的單實(shí)例 Bean 進(jìn)行實(shí)例化與依賴關(guān)系的裝配,使之處于待用狀態(tài)。
spring-context-indexer:該模塊是 Spring 的類管理組件和 Classpath 掃描。
spring-context-support:該模塊是對(duì) Spring IOC 容器的擴(kuò)展支持,以及 IOC 子容器。
spring-expression:該模塊是Spring表達(dá)式語言塊是統(tǒng)一表達(dá)式語言(EL)的擴(kuò)展模塊,可以查詢、管理運(yùn)行中的對(duì)象,同時(shí)也方便的可以調(diào)用對(duì)象方法、操作數(shù)組、集合等。
(2) 數(shù)據(jù)訪問與集成(Data Access/Integration)——Jdbc、Orm、Oxm、Jms、Transactions
?
該層由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 個(gè)模塊組成。它們對(duì)應(yīng)的jar包如下:
?
spring-jdbc:該模塊提供了 JDBC抽象層,它消除了冗長(zhǎng)的 JDBC 編碼和對(duì)數(shù)據(jù)庫供應(yīng)商特定錯(cuò)誤代碼的解析。
spring-tx:該模塊支持編程式事務(wù)和聲明式事務(wù),可用于實(shí)現(xiàn)了特定接口的類和所有的 POJO 對(duì)象。編程式事務(wù)需要自己寫beginTransaction()、commit()、rollback()等事務(wù)管理方法,聲明式事務(wù)是通過注解或配置由 spring 自動(dòng)處理,編程式事務(wù)粒度更細(xì)。
spring-orm:該模塊提供了對(duì)流行的對(duì)象關(guān)系映射 API的集成,包括 JPA、JDO 和 Hibernate 等。通過此模塊可以讓這些 ORM 框架和 spring 的其它功能整合,比如前面提及的事務(wù)管理。
spring-oxm:該模塊提供了對(duì) OXM 實(shí)現(xiàn)的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
spring-jms:該模塊包含生產(chǎn)(produce)和消費(fèi)(consume)消息的功能。從Spring 4.1開始,集成了 spring-messaging 模塊。
(3) Web——Web、Webmvc、WebFlux、Websocket
?
該層由 spring-web、spring-webmvc、spr文章來源:http://www.zghlxwxcb.cn/news/detail-428437.html
?
到了這里,關(guān)于Spring詳解簡(jiǎn)介的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!