雜項-Java:Spring

ylbtech-雜項-Java:Spring

Spring是一個開放源代碼的設計層面框架他解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson建立。簡單來講,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。java

1.返回頂部
一、

起源

你可能正在想「Spring不過是另一個的framework」(英語釋義:框架,骨架;結構,構架)。當已經有許多開放 源代碼(和專有) J2EEframework時,咱們爲何還須要Spring Framework?
Spring是獨特的,由於若干個緣由:
它定位的領域是許多其餘流行的framework沒有的。 Spring致力於提供一種方法管理你的業務對象
Spring是全面的和模塊化的Spring有分層的體系結構,這意味着你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。所以從你的學習中,你可獲得最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理全部的業務對象。
它的設計從底部幫助你編寫易於測試的代碼。Spring是用於測試驅動工程的理想的framework。
Spring對你的工程來講,它不須要一個以上的framework。 Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其餘framework沒有考慮到的內容。
 

背景

Rod Johnson在2002年編著的《Expert one on one J2EE design and development》一書中, 對Java EE 系統框架臃腫、低效、脫離現實的種種現狀提出了質疑,並積極尋求探索革新之道。以此書爲指導思想,他編寫了interface21框架,這是一個力圖衝破J2EE傳統開發的困境, 從實際需求出發,着眼於輕便、靈巧,易於開發、測試和部署的輕量級開發框架。Spring框架即以interface21框架爲基礎,通過從新設計,並不斷豐富其內涵,於2004年3月24日,發佈了1.0正式版。同年他又推出了一部堪稱經典的力做《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變着 Java開發者程序設計和開發的思考方式。在該書中,做者根據本身多年豐富的實踐經驗,對 EJB的各類笨重臃腫的結構進行了逐一的分析和否認,並分別以簡潔實用的方式替換之。至此一戰功成,Rod Johnson成爲一個改變Java世界的大師級人物。
傳統J2EE應用的開發效率低, 應用服務器廠商對各類技術的支持並無真正統一,致使J2EE的應用沒有真正實現Write Once及Run Anywhere的承諾。 Spring做爲開源的中間件,獨立於各類應用服務器,甚至無須應用服務器的支持,也能提供應用服務器的功能,如 聲明式事務、事務處理等。
Spring致力於J2EE應用的各層的解決方案,而不是僅僅專一於某一層的方案。能夠說Spring是 企業應用開發的「一站式」選擇,並貫穿表現層、業務層及持久層然而,Spring並不想取代那些已有的框架,而是與它們無縫地整合
 

框架特徵

輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。而且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。
控制反轉——Spring經過一種稱做控制反轉( IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。你能夠認爲IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面——Spring提供了 面向切面編程的豐富支持, 容許經過分離應用的業務邏輯與系統級服務(例如審計(auditing)和 事務transaction)管理)進行 內聚性的開發。 應用對象只實現它們應該作的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。
容器——Spring包含並管理應用對象的配置和生命週期,在這個意義上它是一種容器,你能夠配置你的每一個bean如何被建立——基於一個可配置原型( prototype),你的bean能夠建立一個單獨的實例或者每次須要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不該該被混同於傳統的重量級的EJB容器,它們常常是龐大與笨重的,難以使用。
框架——Spring能夠將簡單的 組件配置、組合成爲複雜的應用。在Spring中, 應用對象被聲明式地組合,典型地是在一個XML文件裏。Spring也提供了不少基礎功能( 事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
MVC——Spring的做用是整合,但不只僅限於整合,Spring 框架能夠被看作是一個企業解決方案級別的框架。 客戶端發送請求服務器控制器(由DispatcherServlet實現的)完成請求的轉發控制器調用一個用於映射的類HandlerMapping,該類用於將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器Controller(至關於Action)在Spring 當中若是寫一些處理器組件,通常實現Controller 接口,在Controller 中就能夠調用一些Service 或DAO 來進行數據操做 ModelAndView 用於存放從DAO 中取出的數據,還能夠存放響應視圖的一些數據。 若是想將處理結果返回給用戶,那麼在Spring 框架中還提供一個視圖組件ViewResolver,該組件根據Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶。
全部Spring的這些特徵使你可以編寫更乾淨、更可管理、而且更易於測試的代碼。它們也爲Spring中的各類模塊提供了基礎支持。
 

特性

強大的基於  JavaBeans採用控制反轉Inversion of Control,IoC)原則的配置管理,使得應用程序的組件更加快捷簡易。
一個可用於從 applet 到 Java EE 等不一樣運行環境的核心 Bean 工廠。
數據庫事務的通常化抽象層,容許宣告式(Declarative)事務管理器,簡化事務的劃分使之與底層無關。
內建的針對 JTA 和 單個 JDBC 數據源的通常化策略,使 Spring 的事務支持不要求 Java EE 環境,這與通常的 JTA 或者 EJB CMT 相反。
JDBC 抽象層提供了有針對性的異常等級(再也不從SQL異常中提取原始代碼), 簡化了錯誤處理, 大大減小了程序員的編碼量. 再次利用JDBC時,你無需再寫出另外一個 '終止' (finally) 模塊. 而且面向JDBC的異常與Spring 通用 數據訪問對象(Data Access Object) 異常等級相一致.
以資源容器,DAO 實現和事務策略等形式與 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用衆多的反轉控制方便特性來全面支持, 解決了許多典型的Hibernate集成問題. 全部這些所有聽從Spring通用事務處理和通用數據訪問對象異常等級規範.
靈活的基於核心 Spring 功能的 MVC 網頁應用程序框架。開發者經過策略接口將擁有對該框架的高度控制,於是該框架將適應於多種呈現(View)技術,例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中間層能夠輕易地結合於任何基於 MVC 框架的網頁層,例如 Struts,WebWork,或 Tapestry。
提供諸如事務管理等服務的面向切面編程(AOP)框架。
 

特色

1.方便解耦,簡化開發
經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。
2.AOP編程的支持
經過Spring提供的 AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。
3.聲明式事務的支持
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活地進行事務的管理,提升開發效率和質量。
4.方便程序的測試
能夠用非容器依賴的編程方式進行幾乎全部的測試工做,在Spring裏,測試再也不是昂貴的操做,而是隨手可作的事情。例如:Spring對Junit4支持,能夠經過註解方便的測試Spring程序。
5.方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度, Spring提供了對各類優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持
6.下降Java EE API的使用難度
Spring對不少難用的Java EE API(如 JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
7.Java 源碼是經典學習範例
Spring的 源碼設計精妙、結構清晰、匠心獨運,到處體現着大師對 Java設計模式靈活運用以及對Java技術的高深造詣。 Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。
 

好處

在咱們進入細節之前,讓咱們看一下Spring能夠給一個工程帶來的一些好處:
Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘的包含了J2EE特有API的framework,你會發現Spring關注了遺留下的問題。Spring能消除在許多工程上對Singleton的過多使用。根據個人經驗,這是一個主要的問題,它減小了系統的 可測試性面向對象特性。
Spring能消除使用各類各樣格式的屬性定製文件的須要,在整個應用和工程中,可經過一種一致的方法來進行配置。曾經咱們可能對類是否有某個屬性會感到迷惑,所以咱們不得不去看它的javadoc或源碼。自從有了Spring,你可很簡單地看到類的JavaBean屬性。反轉控制的使用(在下面討論)幫助完成這種簡化。
Spring能經過接口而不是類促進好的編程習慣,減小編程代價到幾乎爲零
Spring被設計爲讓使用它建立的應用盡量少的依賴於他的APIs。在Spring應用中的大多數 業務對象沒有依賴於Spring。
使用Spring構建的應用程序易於單元測試
Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。
Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用AOP提供聲明性 事務而不經過使用EJB容器,若是你僅僅須要與單個的數據庫打交道,甚至不須要JTA實現。
Spring爲數據存取提供了一致的框架,不管是使用JDBC或O/R mapping產品(如Hibernate)。
Spring確實使你能經過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
總結起來,Spring有以下優勢:
1.低侵入式設計,代碼污染極低
2.獨立於各類應用服務器,基於Spring框架的應用,能夠真正實現Write Once,Run Anywhere的承諾
3.Spring的DI機制下降了業務對象替換的複雜性,提升了組件之間的解耦
4.Spring的AOP支持容許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用
5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問
6.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有

 

做用

Spring提供許多功能,在此我將快速地依次展現其各個主要方面。
spring spring
首先,讓咱們明確Spring範圍。儘管Spring覆蓋了許多方面,但咱們已經有清楚的概念,它什麼應該涉及和什麼不該該涉及。
Spring的主要目的是使JavaEE易用和促進好編程習慣
Spring不從新開發已有的東西。所以,在Spring中你將發現沒有日誌記錄的包,沒有 鏈接池,沒有分佈事務調度。這些均有 開源項目提供(例如Commons Logging 用來作全部的日誌輸出,或Commons DBCP用來做數據鏈接池),或由你的應用程序 服務器提供。由於一樣的的緣由,咱們沒有提供O/R mapping層,對此,已有友好的解決辦法如Hibernate和JDO。Spring的目標是使已存在的技術更加易用。
例如,儘管咱們沒有底層 事務協調處理,但咱們提供了一個抽象層覆蓋了JTA或任何其餘的事務策略。
Spring沒有直接和其餘的開源項目競爭,除非咱們感到咱們能提供新的一些東西。例如,像許多開發人員,咱們歷來沒有爲Struts高興過,而且感到在MVC web framework中還有改進的餘地。在某些領域,例如輕量級的IoC容器和AOP框架,Spring有直接的競爭,可是在這些領域尚未已經較爲流行的解決方案。(Spring在這些區域是開路先鋒。)
Spring也得益於內在的一致性。
全部的開發者都在唱一樣的的讚歌,基礎想法依然是Expert One-on-One J2EE設計與開發的那些。
而且咱們已經可以使用一些主要的概念,例如倒置控制,來處理多個領域。
Spring在應用服務器之間是可移植的
固然保證可移植性老是一次挑戰,可是咱們避免任何特定平臺或非標準化,而且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其餘的應用服務器上的用戶。
 

基本框架

Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖所示:
組成Spring框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下:
一、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是 工廠模式的實現。BeanFactory 使用 控制反轉(IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
二、Spring 上下文:Spring 上下文是一個 配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
三、Spring AOP:經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。
四、 Spring DAOJDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理 異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
五、 Spring ORM:Spring 框架插入了若干個 ORM框架,從而提供了 ORM 的對象關係工具,其中包括 JDOHibernateiBatisSQL Map。全部這些都聽從 Spring 的通用 事務和 DAO 異常層次結構。
六、 Spring Web 模塊:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還 簡化了處理多部分請求以及將請求參數綁定到域對象的工做
七、 Spring MVC 框架MVC框架是一個全功能的構建 Web應用程序的 MVC 實現。經過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、 VelocityTiles、iText 和 POI。模型由javabean構成,存放於Map;視圖是一個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能能夠用在任何 J2EE 服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和 數據訪問對象。毫無疑問,這樣的對象能夠在不一樣J2EE 環境(Web 或EJB)、獨立應用程序、 測試環境之間重用。
 

下載安裝

下載和安裝Spring請按以下步驟進行。
(1)登陸站點,下載Spring的最新穩定版本。最新版本爲spring-framework-5.0.建議下載spring-framework-spring-framework-4.0.0.M2-dist這個壓縮包不只包含Spring的開發包,並且包含Spring編譯和運行所依賴的第三方類庫。
解壓縮下載到的壓縮包,解壓縮後的文件夾應用以下幾個文件夾。
dist:該文件夾下放Spring的jar包,一般只須要Spring.jar文件便可。該文件夾下還有一些相似spring-Xxx.jar的壓縮包, 這些壓縮包是 spring.jar壓縮包的子模塊壓縮包。除非肯定整個J2EE應用只須要使用Spring的某一方面時,才考慮使用這種分模塊壓縮包。一般建議使用Spring.jar
docs:該文件夾下包含spring的相關文檔、開發指南及API參考文檔
lib:該文件夾下包含spring編譯和運行所依賴的第三方類庫,該路徑下的類庫並非spring必需的,但若是須要使用第三方類庫的支持,這裏的類庫就是必須要的。
samples:該文件夾下包含Spring的幾個簡單例子,可做爲Spring入門學習的案例。
src:該文件夾下包含Spring的所有源文件,若是開發過程當中有地方沒法把握,能夠參考該源文件,瞭解底層實現。
test:該文件夾下包含Spring的測試示例。
tiger:該路徑下存放關於JDK的相關內容
解壓縮後的文件夾下,還包含一些關於Spring的License和項目相關文件
(2)將spring.jar複製到項目的CLASSPATH路徑下,對於Web應用,將spring.jar文件複製到WEB-INF/lib路徑下,該應用便可以利用Spring框架了。
(3)一般Spring的框架還依賴於其餘一些jar文件,所以還須將lib下對應的包複製到WEB-INF/lib路徑下,具體要複製哪些jar文件,取決於應用所須要使用的項目。一般須要複製 cglib,dom4j,jakarta-commons,log4j等文件夾下的jar文件。
(4)爲了編譯java文件,能夠找到Spring的基礎類,將Spring.jar文件的路徑添加到 環境變量CLASSPATH中。固然,也可使用ANT工具,但無須添加環境變量。若是使用Eclipse或者NetBeans等IDE時,也不須要設置環境變量。
Spring MVC
傳統的web架構的view 表現層使用struts做爲表現層。可是若是試用下spring自帶的MVC,會發現spring 在通常場合徹底能夠取代struts。從某些角度來講,spring的 mvc設計的更加合理,有興趣的話不妨嘗試下單個的spring的MVC。
 

應用實例

(略)
 

主要產品

Spring Framework
Spring Web Flow
Spring Web Services
Spring Security (Acegi Security)
Spring Dynamic Modules For OSGi(tm) Service Platf orms
Spring Batch
Spring Integration
Spring LDAP
* Spring IDE
Spring Modules
Spring JavaConfig
Spring Rich Client
Spring .NET
Spring BeanDoc
Spring .NET
Spring 並非Java所特有的,它也應用於.NET平臺。並且獲得了很好的發展
Spring DOTNET 是一個關注於.NET企業應用開發的應用程序框架。它可以提供寬廣範圍的功能,例如依賴注入、 面向切面編程(AOP)、數據訪問抽象,以及ASP DOTNET集成等。基於java的spring框架的核心概念和價值已被應用到.NET。Spring DOTNET 1.0 包含一個徹底功能的依賴注入容器和AOP庫。後續的發佈將包含對ASP DOTNET、Remoting和數據訪問的支持。
 

步驟

Spring確實使你能經過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。同時他的 源代碼的設計理念也受到不少程序員的追捧,簡潔,易用.但是從哪着手研究Spring倒是不少新手頭疼的地方,下面的參考資料將帶領你們慢慢的深刻解析Spring
spring
1 Spring中的事務處理
2 IoC容器在Web容器中的啓動
3 Spring JDBC
4 Spring MVC
5 Spring AOP獲取Proxy
6 Spring聲明式事務處理
7 Spring AOP中對攔截器調用的實現
8 Spring驅動Hibernate的實現
9 Spring Acegi框架鑑權的實現
IOC和AOP
控制反轉模式(也稱做依賴性注入)的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在 配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。在典型的 IOC 場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。下表列出了 IOC 的一個實現模式。
類型 1
服務須要實現專門的接口,經過接口,由對象提供這些服務,能夠從對象查詢 依賴性(例如,須要的附加服務)【接口注入】。
類型 2
經過 JavaBean的屬性(例如 setter 方法)分配依賴性【setter方法注入】。
類型 3
依賴性以 構造函數的形式提供,不以 JavaBean 屬性的形式公開【構造器注入】。
Spring 框架的 IOC 容器採用類型 2 和類型3 實現。
面向切面的編程,即 AOP,是一種編程技術,它容許程序員對橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。
AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業 應用程序開發中的複雜問題。在典型的 面向對象開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才能實現日誌功能。在 AOP 方式中,能夠反過來將日誌服務模塊化,並以聲明的方式將它們應用到須要日誌的 組件上。固然,優點就是 Java 類不須要知道日誌服務的存在,也不須要考慮相關的代碼。因此,用 Spring AOP 編寫的應用程序代碼是鬆散耦合的。
AOP 的功能徹底集成到了 Spring 事務管理、日誌和其餘各類特性的上下文中。
AOP 編程方面, Spring 提供了不少特性,例如 PointCut, Advice, Advisor, 粗略來講就是事務管理、日誌和其餘各類特性 的切入地點。
 

容器

Spring 設計的核心是 org.springframework.beans 包它的設計目標是與 JavaBean 組件一塊兒使用。這個包一般不是由用戶直接使用,而是由 服務器將其用做其餘多數功能的底層中介。 下一個最高級抽象是BeanFactory接口它是工廠設計模式的實現容許經過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。
BeanFactory 支持兩個對象模型。
一、 單態模型提供了 具備特定名稱的對象的共享實例,能夠在查詢時對其進行檢索。Singleton是默認的也是最經常使用的對象模型。對於無狀態服務對象很理想。
二、 原型模型確保每次檢索都會建立單獨的對象。在每一個用戶都須要本身的對象時, 原型模型最適合。
bean 工廠的概念是 Spring 做爲 IOC 容器的基礎。IOC 將處理事情的責任從應用程序代碼轉移到框架。
 
二、
2.返回頂部
 
3.返回頂部
 
4.返回頂部
 
5.返回頂部
0、
一、
二、
 
6.返回頂部
 
warn 做者:ylbtech
出處:http://ylbtech.cnblogs.com/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
相關文章
相關標籤/搜索