初識Spring(爲何要使用Spring?)

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

 

起源

  你可能正在想「Spring不過是另一個的framework」(英語釋義:框架,骨架;結構,構架)。當已經有許多開放 源代碼(和專有)J2EE framework時,咱們爲何還須要Spring Framework?
  Spring是獨特的,由於若干個緣由:
  它定位的領域是許多其餘流行的framework沒有的。Spring致力於提供一種方法管理你的業務對象。
  #業務對象業務對象(Business Object,BO)是對數據進行檢索和處理的組件。是簡單的真實世界的軟件抽象。業務對象一般位於中間層或者業務邏輯層。
 
  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

  面向切面——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中的各類模塊提供了基礎支持。服務器

 

特色

  1.方便解耦,簡化開發架構

  經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。app

  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有以下優勢:

 1.低侵入式設計,代碼污染極低
 2.獨立於各類應用服務器,基於Spring框架的應用,能夠真正實現Write Once,Run Anywhere的承諾
 3.Spring的DI機制下降了業務對象替換的複雜性,提升了組件之間的解耦
 4.Spring的AOP支持容許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用
 5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問
 6.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有

 

簡而言之,咱們使用Spring有以下的緣由:

  1.Spring是 開源輕量級 框架

    2.一站式框架,內部支持對多種優秀開源框架的集成。

    3.Spring 核心 主要有兩部分:

  (1)AOP:面向切面編程,擴展功能不是修改源代碼實現。

  (2)IOC:控制反轉。建立對象不是經過new方式來實現,而是交給Spring配置來建立對象。

  PS:關於AOP和IOC的詳解,若有須要,在個人博客中也有詳細講解

  IOC:https://www.cnblogs.com/xb1223/p/10148503.html

  AOP:https://www.cnblogs.com/xb1223/p/10169220.html

相關文章
相關標籤/搜索