共找到6條詞條名為Spring的結果 展開

Spring

由Rod Johnson創建的一個開源框架

Spring框架是一個開放源代碼的J2EE應用程序框架,由Rod Johnson發起,是針對bean的生命周期進行管理的輕量級容器(lightweight container)。

Spring解決了開發者在J2EE開發中遇到的許多常見的問題,提供了功能強大IOC、AOP及Web MVC等功能。Spring可以單獨應用於構築應用程序,也可以和Struts、Webwork、Tapestry等眾多Web框架組合使用,並且可以與 Swing等桌面應用程序AP組合。因此, Spring不僅僅能應用於JEE應用程序之中,也可以應用於桌面應用程序以及小應用程序之中。Spring框架主要由七部分組成,分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

起源


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

背景


spring[由Rod Johnson創建的一個開源框架]
spring[由Rod Johnson創建的一個開源框架]
Rod Johnson在2 002年編著的《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,ResinJBossWebSphere和其他的應用伺服器上的用戶。

基本框架


Spring
Spring
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,如圖所示:
組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IOC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
2、Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和調度功能。
3、Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持AOP。Spring AOP 模塊為基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。
4、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
5、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
6、Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基於 Web 的應用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
7、Spring MVC 框架:MVC框架是一個全功能的構建 Web應用程序的 MVC 實現。通過策略介面,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、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的全部源文件,如果開發過程中有地方無法把握,可以參考該源文件,了解底層實現。
spring
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。

應用實例


1.新建一個登陸頁面:loginActionSupport.jsp,代碼如下
2.創建一個存儲登陸用戶信息的類:User.java該類繼承於ActionForm,代碼如下:
spring
spring
3.Com.zhaosoft.action中新建一個LoginActionSupport.java,該類不繼承於struts的Action,而是繼承於Spring的ActionSupport,代碼示例如下:
spring
spring

主要產品


Spring Framework
Spring Web Flow
Spring Web Services
Spring Security (Acegi Security)
Spring Dynamic Modules For OSGi(tm) Service Platforms
Spring Batch
Spring Integration
spring
spring
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
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 支持兩個對象模型。
1、單態模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton是默認的也是最常用的對象模型。對於無狀態服務對象很理想。
2、原型模型確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。
bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 將處理事情的責任從應用程序代碼轉移到框架。