主頁 > 軟體設計 > Spring 學習一(了解Spring)

Spring 學習一(了解Spring)

2020-09-11 05:56:44 軟體設計

1.Spring 框架的概念?

  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,

2.Spring框架 組成?  

  Spring 框架是一個分層架構,由 7 個定義良好的模塊組成,分別是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC, 組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實作,每個模塊的功能如下: 1、核心容器 (Spring Core):核心容器提供 Spring 框架的基本功能(Spring Core),核心容器的主要組件是 BeanFactory,它是工廠模式的實作,BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規范與實際的應用程式代碼分開 [3]  , 2、Spring 背景關系(Spring Context):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:負責框架中物件關系映射,提供相關ORM 接入框架的關系物件管理工具 [2]  ,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)、獨立應用程式、測驗環境之間重用,   3.Spring框架 特征?      輕量——從大小與開銷兩方面而言Spring都是輕量的,完整的Spring框架可以在一個大小只有1MB多的JAR檔案里發布,并且Spring所需的處理開銷也是微不足道的,此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴于Spring的特定類, 控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合,當應用了IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己創建或者查找依賴物件,你可以認為IoC與JNDI相反——不是物件從容器中查找依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它,它的底層設計模式采用了工廠模式,所有的 Bean 都需要注冊到Bean工廠中,將其初始化和生命周期的監控交由工廠實作管理,程式員只需要按照規定的格式進行Bean開發,然后利用XML檔案進行bean 的定義和引數配置,其他的動態生成和監控就不需要呼叫者完成,而是統一交給了平臺進行管理, [4]  控制反轉是軟體設計大師 Martin Fowler在 2004 年發表的”Inversion of Control Containers and the Dependency Injection pattern”提出的,這篇文章系統闡述了控制反轉的思想,提出了控制反轉有依賴查找和依賴注入實作方式,控制反轉意味著在系統開發程序中,設計的類將交由容器去控制,而不是在類的內部去控制,類與類之間的關系將交由容器處理,一個類在需要呼叫另一個類時,只要呼叫另一個類在容器中注冊的名字就可以得到這個類的實體,與傳統的編程方式有了很大的不同,“不用你找,我來提供給你”,這就是控制反轉的含義 [5]  ,   面向切面——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中的各種模塊提供了基礎支持,   4.Spring框架 特點?      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原始碼將會使你收到意想不到的效果,   5.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框架的部分或全部

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/4533.html

標籤:架構設計

上一篇:十分鐘腦圖加說明,搞定系統分析師的絕對核心-需求工程

下一篇:高并發實時性網路視頻監控專案實戰

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more