自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring的起源和背景 以及你為什么要使用Spring

開(kāi)發(fā) 后端
本文介紹了Spring的起源和背景。做為一個(gè)開(kāi)源框架,Spring致力于J2EE應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案??梢哉f(shuō)Spring是企業(yè)應(yīng)用開(kāi)發(fā)的“一站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。

Spring的起源和背景

Rod Johson在2002年編著的《Expert one to one J2EE design and development》一書(shū)中,對(duì)Java EE正統(tǒng)框架臃腫、低效、脫離現(xiàn)實(shí)的種種現(xiàn)狀提出了質(zhì)疑,并積極尋求探索革新之道。以此書(shū)為指導(dǎo)思想,他編寫(xiě)了interface21框架,這是一個(gè)力圖沖破Java EE傳統(tǒng)開(kāi)發(fā)的困境,從實(shí)際需求出發(fā),著眼于輕便、靈巧,易于開(kāi)發(fā)、測(cè)試和部署的輕量級(jí)開(kāi)發(fā)框架。Spring框架即以interface21框架為基礎(chǔ),經(jīng)過(guò)重新設(shè)計(jì),并不斷豐富其內(nèi)涵,于2004年3月24日,發(fā)布了1.0正式版。同年他又推出了一部堪稱經(jīng)典的力作《Expert one-to-one J2EE Development without EJB》,該書(shū)在Java世界掀起了軒然大波,不斷改變著Java開(kāi)發(fā)者程序設(shè)計(jì)和開(kāi)發(fā)的思考方式。在該書(shū)中,作者根據(jù)自己多年豐富的實(shí)踐經(jīng)驗(yàn),對(duì)EJB的各種笨重臃腫的結(jié)構(gòu)進(jìn)行了逐一的分析和否定,并分別以簡(jiǎn)潔實(shí)用的方式替換之。至此一戰(zhàn)功成,Rod Johnson成為一個(gè)改變Java世界的大師級(jí)人物。

傳統(tǒng)J2EE應(yīng)用的開(kāi)發(fā)效率低,應(yīng)用服務(wù)器廠商對(duì)各種技術(shù)的支持并沒(méi)有真正統(tǒng)一,導(dǎo)致J2EE的應(yīng)用沒(méi)有真正實(shí)現(xiàn)Write Once及Run Anywhere的承諾。Spring作為開(kāi)源的中間件,獨(dú)立于各種應(yīng)用服務(wù)器,甚至無(wú)須應(yīng)用服務(wù)器的支持,也能提供應(yīng)用服務(wù)器的功能,如聲明式事務(wù)等。

Spring致力于J2EE應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案??梢哉f(shuō)Spring是企業(yè)應(yīng)用開(kāi)發(fā)的“一站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。然而,Spring并不想取代那些已有的框架,而與它們無(wú)縫地整合。

Spring簡(jiǎn)介

Spring是一個(gè)開(kāi)源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。

◆目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能

◆范圍:任何Java應(yīng)用

簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

◆輕量——從大小與開(kāi)銷(xiāo)兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開(kāi)銷(xiāo)也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

◆控制反轉(zhuǎn)——Spring通過(guò)一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為 IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。

◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)()管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

◆容器——Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。

◆框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。

所有Spring的這些特征使你能夠編寫(xiě)更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。

為什么需要Spring

你可能正在想“Spring不過(guò)是另外一個(gè)的framework”。當(dāng)已經(jīng)有許多開(kāi)放源代碼(和專有) J2EE framework時(shí),我們?yōu)槭裁催€需要Spring Framework?

Spring是獨(dú)特的,因?yàn)槿舾蓚€(gè)原因:

◆它定位的領(lǐng)域是許多其他流行的framework沒(méi)有的。Spring關(guān)注提供一種方法管理你的業(yè)務(wù)對(duì)象。

◆ Spring是全面的和模塊化的。Spring有分層的體系結(jié)構(gòu),這意味著你能選擇使用它孤立的任何部分,它的架構(gòu)仍然是內(nèi)在穩(wěn)定的。因此從你的學(xué)習(xí)中,你可得到最大的價(jià)值。例如,你可能選擇僅僅使用Spring來(lái)簡(jiǎn)單化JDBC的使用,或用來(lái)管理所有的業(yè)務(wù)對(duì)象。

◆它的設(shè)計(jì)從底部幫助你編寫(xiě)易于測(cè)試的代碼。Spring是用于測(cè)試驅(qū)動(dòng)工程的理想的framework。

Spring對(duì)你的工程來(lái)說(shuō),它不需要一個(gè)以上的framework。Spring是潛在地一站式解決方案,定位于與典型應(yīng)用相關(guān)的大部分基礎(chǔ)結(jié)構(gòu)。它也涉及到其他framework沒(méi)有考慮到的內(nèi)容。

Spring帶給我們什么

◆方便解耦,簡(jiǎn)化開(kāi)發(fā)

通過(guò)Spring提供的IoC容器,我們可以將對(duì)象之間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼所造成的過(guò)度程序耦合。有了Spring,用戶不必再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫(xiě)代碼,可以更專注于上層的應(yīng)用。

◆AOP編程的支持

通過(guò)Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過(guò)AOP輕松應(yīng)付。

◆聲明式事務(wù)的支持

在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中解脫出來(lái),通過(guò)聲明式方式靈活地進(jìn)行事務(wù)的管理,提高開(kāi)發(fā)效率和質(zhì)量。

◆方便程序的測(cè)試

可以用非容器依賴的編程方式進(jìn)行幾乎所有的測(cè)試工作,在Spring里,測(cè)試不再是昂貴的操作,而是隨手可做的事情。

◆方便集成各種優(yōu)秀框架

Spring不排斥各種優(yōu)秀的開(kāi)源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對(duì)各種優(yōu)秀框架(如Struts,Hibernate、Hession、Quartz)等的直接支持。

◆降低Java EE API的使用難度

Spring對(duì)很多難用的Java EE API(如JDBC,JavaMail,遠(yuǎn)程調(diào)用等)提供了一個(gè)薄薄的封裝層,通過(guò)Spring的簡(jiǎn)易封裝,這些Java EE API的使用難度大為降低。

◆Java 源碼是經(jīng)典學(xué)習(xí)范例

Spring的源碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)Java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。Spring框架源碼無(wú)疑是Java技術(shù)的最佳實(shí)踐范例。如果想在短時(shí)間內(nèi)迅速提高自己的Java技術(shù)水平和應(yīng)用開(kāi)發(fā)水平,學(xué)習(xí)和研究Spring源碼將會(huì)使你收到意想不到的效果。
Spring框架的好處
在我們進(jìn)入細(xì)節(jié)以前,讓我們看一下Spring可以給一個(gè)工程帶來(lái)的一些好處:

◆Spring能有效地組織你的中間層對(duì)象,無(wú)論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會(huì)發(fā)現(xiàn)Spring關(guān)注了遺留下的問(wèn)題,。

◆Spring能消除在許多工程上對(duì)Singleton的過(guò)多使用。根據(jù)我的經(jīng)驗(yàn),這是一個(gè)主要的問(wèn)題,它減少了系統(tǒng)的可測(cè)試性和面向?qū)ο筇匦浴?

◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個(gè)應(yīng)用和工程中,可通過(guò)一種一致的方法來(lái)進(jìn)行配置。曾經(jīng)感到迷惑,一個(gè)特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡(jiǎn)單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡(jiǎn)化。

◆Spring能通過(guò)接口而不是類促進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾乎為零。

◆Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對(duì)象沒(méi)有依賴于Spring。

◆使用Spring構(gòu)建的應(yīng)用程序易于單元測(cè)試。

◆Spring能使EJB的使用成為一個(gè)實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或local EJBs來(lái)實(shí)現(xiàn)業(yè)務(wù)接口,卻不會(huì)影響調(diào)用代碼。

◆Spring幫助你解決許多問(wèn)題而無(wú)需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過(guò)使用EJB容器,如果你僅僅需要與單個(gè)的數(shù)據(jù)庫(kù)打交道,甚至不需要JTA實(shí)現(xiàn)。

■Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/R mapping產(chǎn)品(如Hibernate)。

Spring確實(shí)使你能通過(guò)最簡(jiǎn)單可行的解決辦法解決你的問(wèn)題。這些特性是有很大價(jià)值的。

總結(jié)起來(lái),Spring有如下優(yōu)點(diǎn):

◆低侵入式設(shè)計(jì),代碼污染極低

◆ 獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)Write Once,Run Anywhere的承諾

◆Spring的DI機(jī)制降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性

◆Spring并不完全依賴于Spring,開(kāi)發(fā)者可自由選用Spring框架的部分或全部

Spring能做什么?

Spring提供許多功能,在此我將快速地依次展示其各個(gè)主要方面。

首先,讓我們明確Spring范圍。盡管Spring覆蓋了許多方面,但我們已經(jīng)有清楚的概念,它什么應(yīng)該涉及和什么不應(yīng)該涉及。

Spring的主要目的是使J2EE易用和促進(jìn)好編程習(xí)慣。

Spring不重新開(kāi)發(fā)已有的東西。因此,在Spring中你將發(fā)現(xiàn)沒(méi)有日志記錄的包,沒(méi)有連接池,沒(méi)有分布事務(wù)調(diào)度。這些均有開(kāi)源項(xiàng)目提供(例如 Commons Logging 用來(lái)做所有的日志輸出,或Commons DBCP用來(lái)作數(shù)據(jù)連接池),或由你的應(yīng)用程序服務(wù)器提供。因?yàn)橥瑯拥牡脑?,我們沒(méi)有提供O/R mapping層,對(duì)此,已有有好的解決辦法如Hibernate和JDO。

Spring的目標(biāo)是使已存在的技術(shù)更加易用。

例如,盡管我們沒(méi)有底層事務(wù)協(xié)調(diào)處理,但我們提供了一個(gè)抽象層覆蓋了JTA或任何其他的事務(wù)策略。

Spring沒(méi)有直接和其他的開(kāi)源項(xiàng)目競(jìng)爭(zhēng),除非我們感到我們能提供新的一些東西。例如,象許多開(kāi)發(fā)人員,我們從來(lái)沒(méi)有為Struts高興過(guò),并且感到在MVC web framework中還有改進(jìn)的余地。在某些領(lǐng)域,例如輕量級(jí)的IoC容器和AOP框架,Spring有直接的競(jìng)爭(zhēng),但是在這些領(lǐng)域還沒(méi)有已經(jīng)較為流行的解決方案。(Spring在這些區(qū)域是開(kāi)路先鋒。)

Spring也得益于內(nèi)在的一致性。

所有的開(kāi)發(fā)者都在唱同樣的的贊歌,基礎(chǔ)想法依然是Expert One-on-One J2EE設(shè)計(jì)與開(kāi)發(fā)的那些。

并且我們已經(jīng)能夠使用一些主要的概念,例如倒置控制,來(lái)處理多個(gè)領(lǐng)域。

Spring在應(yīng)用服務(wù)器之間是可移植的。

當(dāng)然保證可移植性總是一次挑戰(zhàn),但是我們避免任何特定平臺(tái)或非標(biāo)準(zhǔn)化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的應(yīng)用服務(wù)器上的用戶。

Spring的下載和安裝

下載和安裝Spring請(qǐng)按如下步驟進(jìn)行。

(1)登錄http://www.springframework.org/download站點(diǎn),下載Spring的最新穩(wěn)定版本。最新版本為Spring Framework 2.5.5.建議下載 spring-framework-2.5.5-with-dependencies.zip這個(gè)壓縮包不包含Spring的開(kāi)發(fā)包,而且包含Spring編譯和運(yùn)行所依賴的第三方類庫(kù)。

下載地址:http://mesh.dl.sourceforge.net/sourceforge/springframework/spring-framework-2.5.5-with-dependencies.zip

解壓縮下載到的壓縮包,解壓縮后的文件夾應(yīng)用如下幾個(gè)文件夾。

◆dist:該文件夾下放Spring的jar包,通常只需要Spring.jar文件即可。該文件夾下還有一些類似spring-Xxx.jar的壓縮包,這些壓縮包是spring.jar壓縮包的子模塊壓縮包。除非確定整個(gè)J2EE應(yīng)用只需要使用Spring的某一方面時(shí),才考慮使用這中分模塊壓縮包。通常建議使用Spring.jar

◆docs:該文件夾下包含spring的相關(guān)文檔、開(kāi)發(fā)指南及API參考文檔。

◆lib:該文件夾下包含spring編譯和運(yùn)行所依賴的第三方類庫(kù),該路徑下的類庫(kù)并不是spring必需的,但如果需要使用第三方類庫(kù)的支持,這里的類庫(kù)就是必需要的。

◆samples:該文件夾下包含Spring的幾個(gè)簡(jiǎn)單例子,可作為Spring入門(mén)學(xué)習(xí)的案例。

◆src:該文件夾下包含Spring的全部源文件,如果開(kāi)發(fā)過(guò)程中有地方無(wú)法把握,可以參考該源文件,了解底層實(shí)現(xiàn)。

◆test:該文件夾下包含Spring的測(cè)試示例。

◆tiger:該路徑下存放關(guān)于JDK的相關(guān)內(nèi)容

◆解壓縮后的文件夾下,還包含一些關(guān)于Spring的License和項(xiàng)目相關(guān)文件

(2)將spring.jar復(fù)制到項(xiàng)目的CLASSPATH路徑下,對(duì)于Web應(yīng)用,將spring.jar文件復(fù)制到WEB-INF/lib路徑下,該應(yīng)用即可以利用Spring框架了。

(3)通常Spring的框架還依賴于其他一些jar文件,因此還須將lib下對(duì)應(yīng)的包復(fù)制到WEB-INF/lib路徑下,具體要復(fù)制哪些jar文件,取決于應(yīng)用所需要使用的項(xiàng)目。通常需要復(fù)制cglib,dom4j,jakarta-commons,log4j等文件夾下的jar文件。

(4)為了編譯java文件,可以找到Spring的基礎(chǔ)類,將Spring.jar文件的路徑添加到環(huán)境變量CLASSPATH中。當(dāng)然,也可以使用ANT工具,但無(wú)須添加環(huán)境變量。如果使用Eclipse或者NetBeans等IDE時(shí),也不需要設(shè)置環(huán)境變量。

【編輯推薦】

  1. jBPM 3.2用戶指南 概覽
  2. jBPM 4.0.0用戶指南 安裝配置
  3. jBPM數(shù)據(jù)庫(kù)表說(shuō)明:流程節(jié)點(diǎn)表
  4. J2EE工作流管理系統(tǒng)jBPM詳解(一)
  5. J2EE工作流管理系統(tǒng)jBPM詳解(二) 
責(zé)任編輯:book05 來(lái)源: 163博客
相關(guān)推薦

2014-04-25 10:05:42

OpenStack私有云公共云

2012-08-13 09:15:54

Go開(kāi)發(fā)語(yǔ)言編程語(yǔ)言

2011-03-08 12:59:38

proftpd

2014-11-21 10:50:26

JavaString

2017-07-03 13:33:42

AndroidItemDecorat

2011-04-14 09:30:15

集合框架

2010-05-11 10:29:06

Unix awk

2014-05-19 15:52:57

Apache StraApache

2022-09-26 10:26:27

FieldIDEASpring

2024-01-24 11:24:03

C++編程異常處理

2013-09-27 11:33:57

交換機(jī)技術(shù)Vlan技術(shù)

2023-09-21 09:00:00

Merge Que開(kāi)發(fā)工具Mergify

2014-01-03 10:59:34

2023-03-06 08:01:25

structGo語(yǔ)言

2021-12-24 17:01:29

Linux工具系統(tǒng)

2024-01-01 08:57:55

ODBCSqlServer數(shù)據(jù)庫(kù)

2021-01-29 14:14:47

動(dòng)態(tài)代理緩存

2024-01-03 08:15:35

Executors線程池線程

2022-04-26 16:56:20

行為數(shù)據(jù)數(shù)據(jù)

2018-05-01 06:43:33

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)