Spring技術體系之源起之戰(zhàn)

我從2016年4月,開始從C++陣營轉向java,一開始覺得很自然,并沒有什么坎。后面隨著慢慢地深入學習,越發(fā)發(fā)現java的體系龐大。真所謂是:

萬事開頭易
然后中間難
最后結尾更難

目前所有做java項目,幾乎都必須用到spring技術框架,對spring框架的了解對自己的技術提升、找工作、或者是長期的職業(yè)發(fā)展道路都至關重要。確定了這一點后,我開始查找spring相關的書籍,最終找到評價還不錯的王福強的《spring揭秘》,然后開始自己的spring之旅。

0x01 Spring誕生背景

早期的J2EE平臺推出的EJB規(guī)范,是為了解決CORBA等分布式架構的不足。但隨著時間推移和技術發(fā)展,EJB也逐漸暴露各種形式的不足,無論是性能,還是使用上的晦澀難懂,還是笨重的框架體系,都讓EJB的使用者感到失望。EJB就像是重裝騎兵,代價高昂,自身兵種限制太多,發(fā)揮作用的場景有限。

于是,一場技術革命在所難免,而燃氣這場革命的星星之火,就是Spring。Spring倡導一切從實際出發(fā),以實用的態(tài)度來選擇適合當前開發(fā)場景的解決方案。

Spring 在起源可以回溯到 Rod Johnson 編寫的“ Expert One-to-One J2EE Design and Development ”一書 (Wrox , 2002) 。在這本書中, Rod 展示了他的 interface21 框架,他為自己的應用編寫了這一框架。這一框架被發(fā)布到開源世界后,組成了現在我們所知的 Spring 框架的基礎。 Spring 在早期的 beta 和發(fā)布備選版本階段進行得很迅速,第一個正式版本 1.0 在 2004 年 3 月 24 日 發(fā)布。從開始到現在,歷經16年的演變,目前已經去到Spring 5了。
官網:http://www.springframework.org

技術是發(fā)展的,但思想是延續(xù)的,當我們借助Spring之船飛渡波瀾不驚的水面亦或闖過驚濤駭浪,不要忘記,或許某天我們會踏上另一條更好的船舶,但Spring之船帶給我們的思想,卻始終陪伴著我們,激勵也好,鞭策也善......

0x02 Spring框架概述

Spring框架所倡導的基于POJO(Plain Old Java Object,簡單Java對象)的輕量級開發(fā)理念,就是從實際出發(fā),立足于最基礎的POJO。我們把POJO對象類比為人類或者是在地球生態(tài)生存的動植物,Spring框架就好像那包裹地球的大氣層一樣,為構筑應用的POJO提供了各種服務,進而創(chuàng)造了一套適宜用POJO進行輕量級開發(fā)的環(huán)境。

Spring框架為POJO提供的各種服務共同組成了Spring的生命之樹,如圖所示。

Spring的生命之樹

組成整個Spring框架的各種服務實現被劃分到了多個相互獨立卻又相互依賴的模塊當中,這些模塊組成了Spring生命之樹的枝和干,說白了也就是它們組成了Spring框架的核心骨架。抓住了這副骨架,也就抓住了Spring框架的學習主線。

我們把Spring的生命之樹理一下,分為一個主樹干和三個分支

主樹干:

整個Spring框架構建在Core核心模塊之上,它是整個框架的基礎。在該模塊中,Spring為我們提供了一個IoC容器(IoC Container)實現,用于幫助我們以依賴注入的方式管理對象之間的依賴關系。對Spring的IoC容器的介紹將成為我們此次Spring之旅的第一站。除此之外,Core核心模塊中還包括框架內部使用的各種工具類。

左分支

沿著Spring生命之樹往上左序遍歷,我們將來到AOP模塊。該模塊提供了一個輕便但功能強大的AOP框架,讓我們可以以AOP的形式增強各POJO的能力,進而補足OOP/OOSD之缺憾。Spring的AOP框架符合AOP Alliance規(guī)范,采用Proxy模式構建,與IoC容器相結合,可以充分顯示出Spring AOP的強大威力。我們將在了解了Spring的IoC容器的基礎上,詳細講述Spring AOP這一部分。

繼續(xù)上行,Spring框架在Core核心模塊和AOP模塊的基礎上,為我們提供了完備的數據訪問和務管理的抽象和集成服務。在數據訪問支持方面,Spring對JDBC API的最佳實踐極大地簡化了該API的使用。除此之外,Spring框架為各種當前業(yè)界流行的ORM產品,比如Hibernate、iBATIS、Toplink、JPA等提供了形式統(tǒng)一的集成支持。Spring框架中的事務管理抽象層是Spring AOP的最佳實踐,它直接構建在Spring AOP的基礎之上,為我們提供了編程式事務管理和聲明式事務管理的完備支持。這些服務極大地簡化了日常應用開發(fā)過程中的數據訪問和事務管理工作。在學習完這兩部分內容之后,相信讀者將會有切身的體會。

中間分支

為了簡化各種Java EE服務(像JNDI、JMS以及JavaMail等)的使用,Spring框架為我們提供了針對這些Java EE服務的集成服務。在Spring的幫助下,這些Java EE服務現在都變得不再煩瑣難用。因為相關的Java EE服務較多,我們將會選擇合適的幾種介紹Spring框架給予它們的支持。

右分支

最后要提到的就是Web模塊。在該模塊中,Spring框架提供了一套自己的Web MVC框架,職責分明的角色劃分讓這套框架看起來十分地“醒目”。我們將為Spring的Web MVC框架單獨開辟一塊“領地”進行講解。在那一部分中,讀者可以充分領略Web MVC框架的魅力。Spring的Portlet MVC構建在Spring Web MVC之上,延續(xù)了Spring Web MVC的一貫風格。

就像一棵樹必須依賴強大的根基才能生長繁盛一樣,Spring框架內的各個模塊也是如此。理論上來說,上層的模塊需要依賴下層的模塊才能正常工作,這就是為什么說這些模塊是相互依賴的。不過,近乎處于同一水平線的各個模塊之間卻可以認為是相互獨立的,彼此之間沒什么瓜葛。從這個角度看,這些模塊之間的相互獨立一說也是成立的。
以上就是對整個Spring框架的總體介紹。

0x03 Spring大觀園

在開始愉快的Spring旅程之前,我想帶大家先逛一逛“Spring大觀園”,這樣,大家就會發(fā)現即將開始的Spring之旅更加值得期待。

Spring大觀園中有一棵參天大樹,它得以茁壯成長,主要因為它有一個好的根基,那就是Spring框架。在Spring框架的基礎上,Spring家族人丁開始興旺,不斷涌現出一個又一個引人注目的家族成員,
包括但不限于:

  • 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。

小結:

本文首先對Spring框架得以迅速崛起的背景做了簡短介紹,然后帶領讀者從總體上了解了Spring框架的構成。最后粗略列舉了Spring體系的成員。在開啟Spring之旅之前,先要記住歷史和整體的框架,后面再慢慢填充知識點。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容