我從2016年4月部翘,開始從C++陣營轉(zhuǎn)向java响委,一開始覺得很自然,并沒有什么坎夹囚。后面隨著慢慢地深入學(xué)習(xí)邀窃,越發(fā)發(fā)現(xiàn)java的體系龐大。真所謂是:
萬事開頭易
然后中間難
最后結(jié)尾更難
目前所有做java項目敲茄,幾乎都必須用到spring技術(shù)框架山析,對spring框架的了解對自己的技術(shù)提升、找工作秆剪、或者是長期的職業(yè)發(fā)展道路都至關(guān)重要爵政。確定了這一點后,我開始查找spring相關(guān)的書籍洁灵,最終找到評價還不錯的王福強的《spring揭秘》掺出,然后開始自己的spring之旅。
0x01 Spring誕生背景
早期的J2EE平臺推出的EJB規(guī)范双抽,是為了解決CORBA等分布式架構(gòu)的不足闲礼。但隨著時間推移和技術(shù)發(fā)展,EJB也逐漸暴露各種形式的不足慎菲,無論是性能聂抢,還是使用上的晦澀難懂,還是笨重的框架體系有决,都讓EJB的使用者感到失望空盼。EJB就像是重裝騎兵,代價高昂台汇,自身兵種限制太多,發(fā)揮作用的場景有限苟呐。
于是牵素,一場技術(shù)革命在所難免,而燃氣這場革命的星星之火笆呆,就是Spring赠幕。Spring倡導(dǎo)一切從實際出發(fā),以實用的態(tài)度來選擇適合當(dāng)前開發(fā)場景的解決方案榕堰。
Spring 在起源可以回溯到 Rod Johnson 編寫的“ Expert One-to-One J2EE Design and Development ”一書 (Wrox 局冰, 2002) 。在這本書中碳胳, Rod 展示了他的 interface21 框架沫勿,他為自己的應(yīng)用編寫了這一框架。這一框架被發(fā)布到開源世界后诫惭,組成了現(xiàn)在我們所知的 Spring 框架的基礎(chǔ)蔓挖。 Spring 在早期的 beta 和發(fā)布備選版本階段進行得很迅速,第一個正式版本 1.0 在 2004 年 3 月 24 日 發(fā)布怨绣。從開始到現(xiàn)在拷获,歷經(jīng)16年的演變,目前已經(jīng)去到Spring 5了赢笨。
官網(wǎng):http://www.springframework.org
技術(shù)是發(fā)展的,但思想是延續(xù)的萧吠,當(dāng)我們借助Spring之船飛渡波瀾不驚的水面亦或闖過驚濤駭浪嘶伟,不要忘記,或許某天我們會踏上另一條更好的船舶,但Spring之船帶給我們的思想铸鹰,卻始終陪伴著我們皂岔,激勵也好,鞭策也善......
0x02 Spring框架概述
Spring框架所倡導(dǎo)的基于POJO(Plain Old Java Object剖毯,簡單Java對象)的輕量級開發(fā)理念教馆,就是從實際出發(fā),立足于最基礎(chǔ)的POJO胶滋。我們把POJO對象類比為人類或者是在地球生態(tài)生存的動植物悲敷,Spring框架就好像那包裹地球的大氣層一樣,為構(gòu)筑應(yīng)用的POJO提供了各種服務(wù)部宿,進而創(chuàng)造了一套適宜用POJO進行輕量級開發(fā)的環(huán)境瓢湃。
Spring框架為POJO提供的各種服務(wù)共同組成了Spring的生命之樹箱季,如圖所示。
組成整個Spring框架的各種服務(wù)實現(xiàn)被劃分到了多個相互獨立卻又相互依賴的模塊當(dāng)中,這些模塊組成了Spring生命之樹的枝和干,說白了也就是它們組成了Spring框架的核心骨架藕坯。抓住了這副骨架苔悦,也就抓住了Spring框架的學(xué)習(xí)主線仑鸥。
我們把Spring的生命之樹理一下,分為一個主樹干和三個分支:
主樹干:
整個Spring框架構(gòu)建在Core核心模塊之上揽咕,它是整個框架的基礎(chǔ)。在該模塊中设易,Spring為我們提供了一個IoC容器(IoC Container)實現(xiàn)蛹头,用于幫助我們以依賴注入的方式管理對象之間的依賴關(guān)系渣蜗。對Spring的IoC容器的介紹將成為我們此次Spring之旅的第一站。除此之外耕拷,Core核心模塊中還包括框架內(nèi)部使用的各種工具類斑胜。
左分支
沿著Spring生命之樹往上左序遍歷,我們將來到AOP模塊掺炭。該模塊提供了一個輕便但功能強大的AOP框架凭戴,讓我們可以以AOP的形式增強各POJO的能力,進而補足OOP/OOSD之缺憾者冤。Spring的AOP框架符合AOP Alliance規(guī)范档痪,采用Proxy模式構(gòu)建,與IoC容器相結(jié)合愿汰,可以充分顯示出Spring AOP的強大威力。我們將在了解了Spring的IoC容器的基礎(chǔ)上摇予,詳細講述Spring AOP這一部分吗跋。
繼續(xù)上行跌宛,Spring框架在Core核心模塊和AOP模塊的基礎(chǔ)上,為我們提供了完備的數(shù)據(jù)訪問和務(wù)管理的抽象和集成服務(wù)本缠。在數(shù)據(jù)訪問支持方面入问,Spring對JDBC API的最佳實踐極大地簡化了該API的使用稀颁。除此之外,Spring框架為各種當(dāng)前業(yè)界流行的ORM產(chǎn)品棱烂,比如Hibernate阶女、iBATIS秃踩、Toplink、JPA等提供了形式統(tǒng)一的集成支持憔杨。Spring框架中的事務(wù)管理抽象層是Spring AOP的最佳實踐消别,它直接構(gòu)建在Spring AOP的基礎(chǔ)之上,為我們提供了編程式事務(wù)管理和聲明式事務(wù)管理的完備支持岁经。這些服務(wù)極大地簡化了日常應(yīng)用開發(fā)過程中的數(shù)據(jù)訪問和事務(wù)管理工作蛇券。在學(xué)習(xí)完這兩部分內(nèi)容之后樊拓,相信讀者將會有切身的體會骑脱。
中間分支
為了簡化各種Java EE服務(wù)(像JNDI苍糠、JMS以及JavaMail等)的使用,Spring框架為我們提供了針對這些Java EE服務(wù)的集成服務(wù)拥娄。在Spring的幫助下瞳筏,這些Java EE服務(wù)現(xiàn)在都變得不再煩瑣難用。因為相關(guān)的Java EE服務(wù)較多摊欠,我們將會選擇合適的幾種介紹Spring框架給予它們的支持柱宦。
右分支
最后要提到的就是Web模塊掸刊。在該模塊中,Spring框架提供了一套自己的Web MVC框架石窑,職責(zé)分明的角色劃分讓這套框架看起來十分地“醒目”蚓炬。我們將為Spring的Web MVC框架單獨開辟一塊“領(lǐng)地”進行講解。在那一部分中棺棵,讀者可以充分領(lǐng)略Web MVC框架的魅力熄捍。Spring的Portlet MVC構(gòu)建在Spring Web MVC之上余耽,延續(xù)了Spring Web MVC的一貫風(fēng)格。
就像一棵樹必須依賴強大的根基才能生長繁盛一樣币喧,Spring框架內(nèi)的各個模塊也是如此。理論上來說干发,上層的模塊需要依賴下層的模塊才能正常工作史翘,這就是為什么說這些模塊是相互依賴的琼讽。不過,近乎處于同一水平線的各個模塊之間卻可以認(rèn)為是相互獨立的钻蹬,彼此之間沒什么瓜葛问欠。從這個角度看,這些模塊之間的相互獨立一說也是成立的术唬。
以上就是對整個Spring框架的總體介紹滚澜。
0x03 Spring大觀園
在開始愉快的Spring旅程之前嫁怀,我想帶大家先逛一逛“Spring大觀園”塘淑,這樣,大家就會發(fā)現(xiàn)即將開始的Spring之旅更加值得期待槐沼。
Spring大觀園中有一棵參天大樹捌治,它得以茁壯成長,主要因為它有一個好的根基兼吓,那就是Spring框架森枪。在Spring框架的基礎(chǔ)上视搏,Spring家族人丁開始興旺审孽,不斷涌現(xiàn)出一個又一個引人注目的家族成員,
包括但不限于:
- Spring Web Flow(SWF)
- Spring Framework浑娜;
- Spring Security(原來的Acegi)佑力;
- Spring Web Flow;
- Spring Web Services筋遭;
- Spring Dynamic Modules for the OSGi Service Platform打颤;
- Spring Batch;
- Pitchfork(http://www.springsource.com/pitchfork)宛畦;
- AspectJ(http://www.eclipse.org/aspectj/)瘸洛;
- Spring IDE;
- Spring .NET次和;
- Spring LDAP;
- Spring Rich Client踏施;
- Spring Integration石蔗。
小結(jié):
本文首先對Spring框架得以迅速崛起的背景做了簡短介紹,然后帶領(lǐng)讀者從總體上了解了Spring框架的構(gòu)成畅形。最后粗略列舉了Spring體系的成員养距。在開啟Spring之旅之前,先要記住歷史和整體的框架日熬,后面再慢慢填充知識點棍厌。