Spring有什么作用

本篇內(nèi)容介紹了“Spring有什么作用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的隨州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

Spring是什么

Spring是一個(gè)開源的輕量級(jí)Java SE(Java 標(biāo)準(zhǔn)版本)/Java EE(Java 企業(yè)版本)開發(fā)應(yīng)用框架,其目的是用于簡(jiǎn)化企業(yè)級(jí)應(yīng)用程序開發(fā)。應(yīng)用程序是由一組相互協(xié)作的對(duì)象組成。而在傳統(tǒng)應(yīng)用程序開發(fā)中,一個(gè)完整的應(yīng)用是由一組相互協(xié)作的對(duì)象組成。所以開發(fā)一個(gè)應(yīng)用除了要開發(fā)業(yè)務(wù)邏輯之外,最多的是關(guān)注如何使這些對(duì)象協(xié)作來完成所需功能,而且要低耦合、高內(nèi)聚。業(yè)務(wù)邏輯開發(fā)是不可避免的,那如果有個(gè)框架出來幫我們來創(chuàng)建對(duì)象及管理這些對(duì)象之間的依賴關(guān)系??赡苡腥苏f了,比如“抽象工廠、工廠方法設(shè)計(jì)模式”不也可以幫我們創(chuàng)建對(duì)象,“生成器模式”幫我們處理對(duì)象間的依賴關(guān)系,不也能完成這些功能嗎?可是這些又需要我們創(chuàng)建另一些工廠類、生成器類,我們又要而外管理這些類,增加了我們的負(fù)擔(dān),如果能有種通過配置方式來創(chuàng)建對(duì)象,管理對(duì)象之間依賴關(guān)系,我們不需要通過工廠和生成器來創(chuàng)建及管理對(duì)象之間的依賴關(guān)系,這樣我們是不是減少了許多工作,加速了開發(fā),能節(jié)省出很多時(shí)間來干其他事。Spring框架剛出來時(shí)主要就是來完成這個(gè)功能。

Spring框架除了幫我們管理對(duì)象及其依賴關(guān)系,還提供像通用日志記錄、性能統(tǒng)計(jì)、安全控制、異常處理等面向切面的能力,還能幫我管理最頭疼的數(shù)據(jù)庫(kù)事務(wù),本身提供了一套簡(jiǎn)單的JDBC訪問實(shí)現(xiàn),提供與第三方數(shù)據(jù)訪問框架集成(如Hibernate、JPA),與各種Java EE技術(shù)整合(如Java Mail、任務(wù)調(diào)度等等),提供一套自己的web層框架Spring MVC、而且還能非常簡(jiǎn)單的與第三方web框架集成。從這里我們可以認(rèn)為Spring是一個(gè)超級(jí)粘合平臺(tái),除了自己提供功能外,還提供粘合其他技術(shù)和框架的能力,從而使我們可以更自由的選擇到底使用什么技術(shù)進(jìn)行開發(fā)。而且不管是JAVA SE(C/S架構(gòu))應(yīng)用程序還是JAVA EE(B/S架構(gòu))應(yīng)用程序都可以使用這個(gè)平臺(tái)進(jìn)行開發(fā)。讓我們來深入看一下Spring到底能幫我們做些什么?

Spring能幫我們做什么

Spring除了不能幫我們寫業(yè)務(wù)邏輯,其余的幾乎什么都能幫助我們簡(jiǎn)化開發(fā):

一、傳統(tǒng)程序開發(fā),創(chuàng)建對(duì)象及組裝對(duì)象間依賴關(guān)系由我們?cè)诔绦騼?nèi)部進(jìn)行控制,這樣會(huì)加大各個(gè)對(duì)象間的耦合,如果我們要修改對(duì)象間的依賴關(guān)系就必須修改源代碼,重新編譯、部署;而如果采用Spring,則由Spring根據(jù)配置文件來進(jìn)行創(chuàng)建及組裝對(duì)象間依賴關(guān)系,只需要改配置文件即可,無需重新編譯。所以,Spring能幫我們根據(jù)配置文件創(chuàng)建及組裝對(duì)象之間的依賴關(guān)系。

二、當(dāng)我們要進(jìn)行一些日志記錄、權(quán)限控制、性能統(tǒng)計(jì)等時(shí),在傳統(tǒng)應(yīng)用程序當(dāng)中我們可能在需要的對(duì)象或方法中進(jìn)行,而且比如權(quán)限控制、性能統(tǒng)計(jì)大部分是重復(fù)的,這樣代碼中就存在大量重復(fù)代碼,即使有人說我把通用部分提取出來,那必然存在調(diào)用還是存在重復(fù),像性能統(tǒng)計(jì)我們可能只是在必要時(shí)才進(jìn)行,在診斷完畢后要?jiǎng)h除這些代碼;還有日志記錄,比如記錄一些方法訪問日志、數(shù)據(jù)訪問日志等等,這些都會(huì)滲透到各個(gè)要訪問方法中;還有權(quán)限控制,必須在方法執(zhí)行開始進(jìn)行審核,想想這些是多么可怕而且是多么無聊的工作。如果采用Spring,這些日志記錄、權(quán)限控制、性能統(tǒng)計(jì)從業(yè)務(wù)邏輯中分離出來,通過Spring支持的面向切面編程,在需要這些功能的地方動(dòng)態(tài)添加這些功能,無需滲透到各個(gè)需要的方法或?qū)ο笾?;有人可能說了,我們可以使用“代理設(shè)計(jì)模式”或“包裝器設(shè)計(jì)模式”,你可以使用這些,但還是需要通過編程方式來創(chuàng)建代理對(duì)象,還是要耦合這些代理對(duì)象,而采用Spring 面向切面編程能提供一種更好的方式來完成上述功能,一般通過配置方式,而且不需要在現(xiàn)有代碼中添加任何額外代碼,現(xiàn)有代碼專注業(yè)務(wù)邏輯。所以,Spring 面向切面編程能幫助我們無耦合的實(shí)現(xiàn)日志記錄,性能統(tǒng)計(jì),安全控制。

三、在傳統(tǒng)應(yīng)用程序當(dāng)中,我們?nèi)绾蝸硗瓿蓴?shù)據(jù)庫(kù)事務(wù)管理?需要一系列“獲取連接,執(zhí)行SQL,提交或回滾事務(wù),關(guān)閉連接”,而且還要保證在最后一定要關(guān)閉連接,多么可怕的事情,而且也很無聊;如果采用Spring,我們只需獲取連接,執(zhí)行SQL,其他的都交給Spring來管理了,簡(jiǎn)單吧。所以,Spring能非常簡(jiǎn)單的幫我們管理數(shù)據(jù)庫(kù)事務(wù)。

四、Spring還提供了與第三方數(shù)據(jù)訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板,來方便數(shù)據(jù)庫(kù)訪問。

五、Spring還提供與第三方Web(如Struts、JSF)框架無縫集成,而且自己也提供了一套Spring MVC框架,來方便web層搭建。

六、Spring能方便的與Java EE(如Java Mail、任務(wù)調(diào)度)整合,與更多技術(shù)整合(比如緩存框架)。

Spring能幫我們做這么多事情,提供這么多功能和與那么多主流技術(shù)整合,而且是幫我們做了開發(fā)中比較頭疼和困難的事情,那可能有人會(huì)問,難道只有Spring這一個(gè)框架,沒有其他選擇?當(dāng)然有,比如EJB需要依賴應(yīng)用服務(wù)器、開發(fā)效率低、在開發(fā)中小型項(xiàng)目是宰雞拿牛刀,雖然發(fā)展到現(xiàn)在EJB比較好用了,但還是比較笨重還需要依賴應(yīng)用服務(wù)器等。那為何需要使用Spring,而不是其他框架呢?讓我們接著往下看。

為何需要Spring

一 首先闡述幾個(gè)概念

1、應(yīng)用程序:是能完成我們所需要功能的成品,比如購(gòu)物網(wǎng)站、OA系統(tǒng)。

2、框架:是能完成一定功能的半成品,比如我們可以使用框架進(jìn)行購(gòu)物網(wǎng)站開發(fā);框架做一部分功能,我們自己做一部分功能,這樣應(yīng)用程序就創(chuàng)建出來了。而且框架規(guī)定了你在開發(fā)應(yīng)用程序時(shí)的整體架構(gòu),提供了一些基礎(chǔ)功能,還規(guī)定了類和對(duì)象的如何創(chuàng)建、如何協(xié)作等,從而簡(jiǎn)化我們開發(fā),讓我們專注于業(yè)務(wù)邏輯開發(fā)。

3、非侵入式設(shè)計(jì):從框架角度可以這樣理解,無需繼承框架提供的類,這種設(shè)計(jì)就可以看作是非侵入式設(shè)計(jì),如果繼承了這些框架類,就是侵入設(shè)計(jì),如果以后想更換框架之前寫過的代碼幾乎無法重用,如果非侵入式設(shè)計(jì)則之前寫過的代碼仍然可以繼續(xù)使用。

4、輕量級(jí)及重量級(jí):輕量級(jí)是相對(duì)于重量級(jí)而言的,輕量級(jí)一般就是非入侵性的、所依賴的東西非常少、資源占用非常少、部署簡(jiǎn)單等等,其實(shí)就是比較容易使用,而重量級(jí)正好相反。

5、POJO:POJO(Plain Old Java Objects)簡(jiǎn)單的Java對(duì)象,它可以包含業(yè)務(wù)邏輯或持久化邏輯,但不擔(dān)當(dāng)任何特殊角色且不繼承或不實(shí)現(xiàn)任何其它Java框架的類或接口。

6、容器:在日常生活中容器就是一種盛放東西的器具,從程序設(shè)計(jì)角度看就是裝對(duì)象的的對(duì)象,因?yàn)榇嬖诜湃搿⒛贸龅炔僮?,所以容器還要管理對(duì)象的生命周期。

7、控制反轉(zhuǎn):即Inversion of Control,縮寫為IoC,控制反轉(zhuǎn)還有一個(gè)名字叫做依賴注入(Dependency Injection),就是由容器控制程序之間的關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控。

8、Bean:一般指容器管理對(duì)象,在Spring中指Spring IoC容器管理對(duì)象。

二 為什么需要Spring及Spring的優(yōu)點(diǎn)

●非常輕量級(jí)的容器:以集中的、自動(dòng)化的方式進(jìn)行應(yīng)用程序?qū)ο髣?chuàng)建和裝配,負(fù)責(zé)對(duì)象創(chuàng)建和裝配,管理對(duì)象生命周期,能組合成復(fù)雜的應(yīng)用程序。Spring容器是非侵入式的(不需要依賴任何Spring特定類),而且完全采用POJOs進(jìn)行開發(fā),使應(yīng)用程序更容易測(cè)試、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依賴任何應(yīng)用服務(wù)器,可以部署在任何環(huán)境(Java SE或Java EE)。

●AOP:AOP是Aspect Oriented Programming的縮寫,意思是面向切面編程,提供從另一個(gè)角度來考慮程序結(jié)構(gòu)以完善面向?qū)ο缶幊蹋ㄏ鄬?duì)于OOP),即可以通過在編譯期間、裝載期間或運(yùn)行期間實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)添加功能的一種技術(shù)。通俗點(diǎn)說就是把可重用的功能提取出來,然后將這些通用功能在合適的時(shí)候織入到應(yīng)用程序中;比如安全,日記記錄,這些都是通用的功能,我們可以把它們提取出來,然后在程序執(zhí)行的合適地方織入這些代碼并執(zhí)行它們,從而完成需要的功能并復(fù)用了這些功能。

● 簡(jiǎn)單的數(shù)據(jù)庫(kù)事務(wù)管理:在使用數(shù)據(jù)庫(kù)的應(yīng)用程序當(dāng)中,自己管理數(shù)據(jù)庫(kù)事務(wù)是一項(xiàng)很讓人頭疼的事,而且很容易出現(xiàn)錯(cuò)誤,Spring支持可插入的事務(wù)管理支持,而且無需JEE環(huán)境支持,通過Spring管理事務(wù)可以把我們從事務(wù)管理中解放出來來專注業(yè)務(wù)邏輯。

●JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(數(shù)據(jù)訪問對(duì)象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事務(wù)和使用Spring提供的一致的異常體系。

●靈活的Web層支持:Spring本身提供一套非常強(qiáng)大的MVC框架,而且可以非常容易的與第三方MVC框架集成,比如Struts等。

●簡(jiǎn)化各種技術(shù)集成:提供對(duì)Java Mail、任務(wù)調(diào)度、JMX、JMS、JNDI、EJB、動(dòng)態(tài)語(yǔ)言、遠(yuǎn)程訪問、Web Service等的集成。

Spring能幫助我們簡(jiǎn)化應(yīng)用程序開發(fā),幫助我們創(chuàng)建和組裝對(duì)象,為我們管理事務(wù),簡(jiǎn)單的MVC框架,可以把Spring看作是一個(gè)超級(jí)粘合平臺(tái),能把很多技術(shù)整合在一起,形成一個(gè)整體,使系統(tǒng)結(jié)構(gòu)更優(yōu)良、性能更出眾,從而加速我們程序開發(fā),有如上優(yōu)點(diǎn),我們沒有理由不考慮使用它。

如何學(xué)好Spring

要學(xué)好Spring,首先要明確Spring是個(gè)什么東西,能幫我們做些什么事情,知道了這些然后做個(gè)簡(jiǎn)單的例子,這樣就基本知道怎么使用Spring了。Spring核心是IoC容器,所以一定要透徹理解什么是IoC容器,以及如何配置及使用容器,其他所有技術(shù)都是基于容器實(shí)現(xiàn)的;理解好IoC后,接下來是面向切面編程,首先還是明確概念,基本配置,最后是實(shí)現(xiàn)原理,接下來就是數(shù)據(jù)庫(kù)事務(wù)管理,其實(shí)Spring管理事務(wù)是通過面向切面編程實(shí)現(xiàn)的,所以基礎(chǔ)很重要,IoC容器和面向切面編程搞定后,其余都是基于這倆東西的實(shí)現(xiàn),學(xué)起來就更加輕松了。要學(xué)好Spring不能急,一定要把基礎(chǔ)打牢,基礎(chǔ)牢固了,這就是磨刀不誤砍柴工。

Spring基礎(chǔ)

Spring架構(gòu)圖

 Spring有什么作用

圖 1-1 Spring架構(gòu)圖

核心容器:包括Core、Beans、Context、EL模塊。

●Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉(zhuǎn)換及一些常用工具類。

●Beans模塊:提供了框架的基礎(chǔ)部分,包括反轉(zhuǎn)控制和依賴注入。其中Bean Factory是容器核心,本質(zhì)是“工廠設(shè)計(jì)模式”的實(shí)現(xiàn),而且無需編程實(shí)現(xiàn)“單例設(shè)計(jì)模式”,單例完全由容器控制,而且提倡面向接口編程,而非面向?qū)崿F(xiàn)編程;所有應(yīng)用程序?qū)ο蠹皩?duì)象間關(guān)系由框架管理,從而真正把你從程序邏輯中把維護(hù)對(duì)象之間的依賴關(guān)系提取出來,所有這些依賴關(guān)系都由BeanFactory來維護(hù)。

●Context模塊:以Core和Beans為基礎(chǔ),集成Beans模塊功能并添加資源綁定、數(shù)據(jù)驗(yàn)證、國(guó)際化、Java EE支持、容器生命周期、事件傳播等;核心接口是ApplicationContext。

●EL模塊:提供強(qiáng)大的表達(dá)式語(yǔ)言支持,支持訪問和修改屬性值,方法調(diào)用,支持訪問及修改數(shù)組、容器和索引器,命名變量,支持算數(shù)和邏輯運(yùn)算,支持從Spring 容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

AOP、Aspects模塊:

●AOP模塊:Spring AOP模塊提供了符合 AOP Alliance規(guī)范的面向方面的編程(aspect-oriented programming)實(shí)現(xiàn),提供比如日志記錄、權(quán)限控制、性能統(tǒng)計(jì)等通用功能和業(yè)務(wù)邏輯分離的技術(shù),并且能動(dòng)態(tài)的把這些功能添加到需要的代碼中;這樣各專其職,降低業(yè)務(wù)邏輯和通用功能的耦合。

●Aspects模塊:提供了對(duì)AspectJ的集成,AspectJ提供了比Spring ASP更強(qiáng)大的功能。

數(shù)據(jù)訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務(wù)管理。

●事務(wù)模塊:該模塊用于Spring管理事務(wù),只要是Spring管理對(duì)象都能得到Spring管理事務(wù)的好處,無需在代碼中進(jìn)行事務(wù)控制了,而且支持編程和聲明性的事物管理。

●JDBC模塊:提供了一個(gè)JBDC的樣例模板,使用這些模板能消除傳統(tǒng)冗長(zhǎng)的JDBC編碼還有必須的事務(wù)控制,而且能享受到Spring管理事務(wù)的好處。

●ORM模塊:提供與流行的“對(duì)象-關(guān)系”映射框架的無縫集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事務(wù)管理,無需額外控制事務(wù)。

●OXM模塊:提供了一個(gè)對(duì)Object/XML映射實(shí)現(xiàn),將java對(duì)象映射成XML數(shù)據(jù),或者將XML數(shù)據(jù)映射成java對(duì)象,Object/XML映射實(shí)現(xiàn)包括JAXB、Castor、XMLBeans和XStream。

●JMS模塊:用于JMS(Java Messaging Service),提供一套 “消息生產(chǎn)者、消息消費(fèi)者”模板用于更加簡(jiǎn)單的使用JMS,JMS用于用于在兩個(gè)應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。

●Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。

●Web模塊:提供了基礎(chǔ)的web功能。例如多文件上傳、集成IoC容器、遠(yuǎn)程過程訪問(RMI、Hessian、Burlap)以及Web Service支持,并提供一個(gè)RestTemplate類來提供方便的Restful services訪問。

●Web-Servlet模塊:提供了一個(gè)Spring MVC Web框架實(shí)現(xiàn)。Spring MVC框架提供了基于注解的請(qǐng)求資源注入、更簡(jiǎn)單的數(shù)據(jù)綁定、數(shù)據(jù)驗(yàn)證等及一套非常易用的JSP標(biāo)簽,完全無縫與Spring其他技術(shù)協(xié)作。

●Web-Struts模塊:提供了與Struts無縫集成,Struts1.x 和Struts2.x都支持

Test模塊: Spring支持Junit和TestNG測(cè)試框架,而且還額外提供了一些基于Spring的測(cè)試功能,比如在測(cè)試Web框架時(shí),模擬Http請(qǐng)求的功能。

典型應(yīng)用場(chǎng)景

Spring可以應(yīng)用到許多場(chǎng)景,從最簡(jiǎn)單的標(biāo)準(zhǔn)Java SE程序到企業(yè)級(jí)應(yīng)用程序都能使用Spring來構(gòu)建。以下介紹幾個(gè)比較流行的應(yīng)用場(chǎng)景:

●典型Web應(yīng)用程序應(yīng)用場(chǎng)景:

 Spring有什么作用

圖1-2 web應(yīng)用程序應(yīng)用場(chǎng)景

在Web應(yīng)用程序應(yīng)用場(chǎng)景中,典型的三層架構(gòu):數(shù)據(jù)模型層實(shí)現(xiàn)域?qū)ο?;?shù)據(jù)訪問層實(shí)現(xiàn)數(shù)據(jù)訪問;邏輯層實(shí)現(xiàn)業(yè)務(wù)邏輯;web層提供頁(yè)面展示;所有這些層組件都由Spring進(jìn)行管理,享受到Spring事務(wù)管理、AOP等好處,而且請(qǐng)求唯一入口就是DispachterServlet,它通過把請(qǐng)求映射為相應(yīng)web層組件來實(shí)現(xiàn)相應(yīng)請(qǐng)求功能。

●遠(yuǎn)程訪問應(yīng)用場(chǎng)景:

Spring能非常方便的提供暴露RMI服務(wù),遠(yuǎn)程訪問服務(wù)如Hessian、Burlap等,實(shí)現(xiàn)非常簡(jiǎn)單只需通過在Spring中配置相應(yīng)的地址及需要暴露的服務(wù)即可輕松實(shí)現(xiàn),后邊會(huì)有介紹;

●EJB應(yīng)用場(chǎng)景:

Spring也可以與EJB輕松集成。

“Spring有什么作用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

當(dāng)前題目:Spring有什么作用
網(wǎng)站路徑:http://www.muchs.cn/article36/jpjepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作自適應(yīng)網(wǎng)站、ChatGPT、服務(wù)器托管、企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作