《Spring 3.0就這麼簡單》——第1章 快速入門 1.1 Spring概述
本節書摘來自異步社區《Spring 3.0就這麼簡單》一書中的第1章,第1.1節,作者: 陳雄華 , 林開雄著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
第1章 快速入門
本章通過一個簡單的例子展現開發Spring Web應用的整體過程,通過這個實例,讀者可以快速進入Spring Web應用的世界。實例應用按持久層、業務層和展現層進行組織,從底層DAO程序到Web展現程序逐層演進,一步步地搭建起一個完整的實例。通過本章的學習,讀者可以獨立完成一個典型的基於Spring的Web應用。
本章主要內容:
Spring 概述
用戶登錄實例介紹
基於 Spring JDBC 的持久層實現
基於 Spring 聲明式事務的業務層實現
基於 Spring MVC 的展現層實現
在 IntelliJ IDEA 中開發 Web 應用的過程
運行 Web 應用
本章亮點:
非傳統Hello World的快速入門實例
基於Maven模塊化來講解開發過程 詳盡的開發過程,使讀者快速上手
1.1 Spring概述
1.1.1 認識Spring
Spring是眾多Java開源項目中的一員,唯一不同的是:它秉承破除權威迷信,一切從實踐中來到實踐中去的信念,宛如阿基米德手中的杠杆,以一己之力撼動了Java EE傳統重量級框架堅如磐石的大廈。
要用一兩句話總結出Spring的所有內涵確實有點困難,但是為了先給讀者一個基本的印象,我們嚐試進行以下概括。
Spring是分層的Java SE/EE應用一站式的輕量級開源框架,以反轉控製(Inverse of Control,IoC)和麵向切麵編程(Aspect Oriented Programming,AOP)為內核,提供了展現層Spring MVC、持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,此外,Spring以海納百川的胸懷整合了開源世界裏眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE企業應用開源框架。
從2004年發布第一個版本以來,Spring逐漸占據了Java開發人員的視線,獲得了開源社區的一片讚譽之聲。
1.1.2 Spring帶給我們什麼
也許有很多的開發者曾經被EJB的過度宣傳所迷惑,成為EJB的擁躉,並因此擁有一段痛苦的開發經曆。EJB的複雜源於它對所有的企業應用采用統一的標準,它認為所有的企業應用都需要分布式對象、遠程事務,因此造就了EJB框架的極度複雜。這種複雜不僅造成陡峭的學習曲線,而且給開發、測試、部署都造成了很多額外的要求和工作量。其中最大的詬病就是難於測試,因為這種測試不能脫離EJB容器,每次測試都需要進行應用部署並啟動EJB容器,而部署和啟動EJB是一項費時費力的重型操作,其結果是測試工作往往成為開發工作的瓶頸。
Spring認為Java EE的開發應該更容易、更簡單。在實現這一目標時,Spring一直貫徹並遵守“好的設計優於具體實現,代碼應易於測試”這一理念,並最終帶給我們一個易於開發、便於測試而又功能齊全的開發框架。概括起來,Spring給我們帶來以下幾方麵的好處。
方便解耦,簡化開發。
通過Spring提供的IoC容器,可以將對象之間的依賴關係交由Spring進行控製,避免硬編碼所造成的過度程序耦合。有了Spring,用戶就不必再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,而可以更加專注於上層的應用。
AOP編程的支持。
通過Spring提供的AOP功能,用戶可以方便地進行麵向切麵編程,許多不容易用傳統麵向對象編程(OOP)實現的功能都可以通過AOP輕鬆應對。
聲明式事務的支持。
在Spring中,用戶可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式事務靈活地進行事務管理,提高開發效率和質量。
方便程序的測試。
可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring中,測試不再是昂貴的操作,而是隨手可做的事情。
方便集成各種優秀的框架。
Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。
降低Java EE API的使用難度。
Spring為很多難用的Java EE API(如JDBC、JavaMail、遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,大大降低了這些Java EE API的使用難度。
Java源碼是經典的學習範例。
Spring的源碼設計精妙、結構清晰、匠心獨用,處處體現著大師對Java設計模式的靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,那麼學習和研究Spring源碼就可以讓你獲得意想不到的效果。
1.1.3 Spring體係結構
Spring框架由1 400多個類組成,整個框架按其所屬功能可以劃分為5個主要模塊,如圖1-1所示。
圖1-1 Spring框架結構
從整體看,這5個主要模塊幾乎為企業應用提供了所需的一切,從持久層、業務層到展現層都擁有相應的支持。就像呂布的赤兔馬和方天畫戟、秦瓊的黃驃馬和熟銅鐧,IoC和AOP是Spring所依賴的根本。在此基礎上,Spring整合了各種企業應用開源框架和許多優秀的第三方類庫,成為Java企業應用full-stack的開發框架。Spring框架的精妙之處在於:開發者擁有自由的選擇權,Spring不會將自己的意誌強加給開發者,因為針對某個領域問題,Spring往往支持多種實現方案。當希望選用不同的實現方案時,Spring又能保證過渡的平滑性。
IoC。
Spring核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方式進行依賴關係描述,由IoC容器負責依賴類之間的創建、拚接、管理、獲取等工作。BeanFactory接口是Spring框架的核心接口,它實現了容器的許多核心功能。
Context模塊構建於核心模塊之上,擴展了BeanFactory的功能,添加了i18n國際化、Bean生命周期控製、框架事件體係、資源加載透明化等多項功能。此外,該模塊還提供了許多企業級服務的支持,如郵件服務、任務調度、JNDI定位、EJB集成、遠程訪問等。ApplicationContext是Context模塊的核心接口。
表達式語言模塊是統一表達式語言(unified EL)的一個擴展,該表達式語言用於查詢和管理運行期的對象,支持設置和獲取對象屬性,調用對象方法,操作數組、集合等。還提供了邏輯表達式運算、變量定義等功能。使用它就可以方便地通過表達式串和Spring IoC容器進行交互。
AOP模塊。
AOP是繼OOP之後,對編程設計思想影響最大的技術之一。AOP是進行橫切邏輯編程的思想,它開拓了人們考慮問題的思路。在AOP模塊裏,Spring提供了滿足AOP Alliance規範的實現,此外,還整合了AspectJ這種AOP語言級的框架。在Spring裏實現AOP編程有許多的選擇。Java 5.0引入java.lang.instrument,允許在JVM啟動時啟用一個代理類,通過該代理類在運行期修改類的字節碼,改變一個類的功能,實現AOP的功能。
數據訪問和集成。
任何應用程序的核心問題都是對數據的訪問和操作。數據有很多表現形式,如數據表、XML、消息等,而每種數據形式又擁有不同的數據訪問技術(如數據表的訪問既可以直接通過JDBC,也可以通過Hibernate或iBatis)。
Spring站在DAO的抽象層麵,建立了一套麵向DAO層統一的異常體係,同時將各種訪問數據的檢查型異常轉換為非檢查型異常,為整合各種持久層框架提供基礎。其次,Spring通過模板化技術對各種數據訪問技術進行了薄層的封裝,將模式化的代碼隱藏起來,使數據訪問的程序得到大幅簡化。這樣,Spring就建立起了和數據形式及訪問技術無關的統一的DAO層,借助AOP技術,Spring提供了聲明式事務的功能。
Web及遠程操作。
該模塊建立在Application Context模塊之上,提供了Web應用的各種工具類,如通過Listener或Servlet初始化Spring容器,將Spring容器注冊到Web容器中。其次,該模塊還提供了多項麵向Web的功能,如透明化文件上傳,Velocity、FreeMarker、XSLT的支持。此外,Spring可以整合Struts、WebWork、Tapestry Web等MVC框架。
Web及遠程訪問。
Spring提供了一個完整的類似於Struts的MVC框架,稱為Spring MVC。據說,Spring之所以也提供了一個MVC框架,是因為Rod Johnson想證明實現MVC其實是一項簡單的工作。當然,如果不希望使用Spring MVC,那麼Spring對Struts、Tapestry等MVC框架的整合,一定也可以給你帶來方便。相對於Servlet的MVC,Spring在簡化Portlet的開發上也做了很多工作,開發者可以從中受益。
此外,Spring在遠程訪問以及Web Service上提供了對很多著名框架的整合。由於Spring框架的擴展性,特別是隨著Spring框架影響性的擴大,越來越多框架主動地支持Spring框架,讓Spring框架應用的涵蓋麵越來越寬廣。
最後更新:2017-05-31 14:01:42
上一篇:
《Spring 3.0就這麼簡單》——1.2 實例功能概述
下一篇:
《Spring Data實戰》——導讀
數十位雲棲專家齊聚京頤,暢談智慧醫療未來趨勢
???Hadoop???????????????????????????1???-??????-????????????-?????????
雲際闊 總相連 ——雲棲大會上海峰會阿裏雲服務專場幹貨集錦
如何重啟雲服務器?
阿裏雲首推音樂變速短視頻SDK,上線抖音 freestyle隻需1步
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
我的老板有個帥帥的好朋友,喜歡大閘蟹配冰酒
程序員們,到了背起你的行囊的時候了!
Java常用設計模式
JQ錨點動畫滾動