Spring 學習一(瞭解Spring)

来源:https://www.cnblogs.com/makefire/archive/2020/04/29/12802247.html
-Advertisement-
Play Games

1.Spring 框架的概念? Spring框架是一個開放源代碼的J2EE應用程式框架,由Rod Johnson發起,是針對bean的生命周期進行管理的輕量級容器(lightweight container)。 Spring解決了開發者在J2EE開發中遇到的許多常見的問題,提供了功能強大IOC、AO ...


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 的對象關係工具,其中包括JDOHibernateiBatisSQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。 6、Spring Web 模塊:Web 上下文模塊建立在應用程式上下文模塊之上,為基於 Web 的應用程式提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。 7、Spring MVC 框架:MVC框架是一個全功能的構建 Web應用程式的 MVC 實現。通過策略介面,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、VelocityTiles、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框架的部分或全部
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript實現簡單的圓球反彈運動 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale= ...
  • 之前博客地址發生更改,重新發佈! 在傳統網站開發中,我們一般使用比如asp、php、jsp等技術進行開發,開發完成後統一部署在伺服器上,我們訪問時,會在瀏覽器中發送帶有'.asp','.php','.jsp'等尾碼路徑的url請求,伺服器會根據對應的路由映射表,找到我們請求的頁面並渲染成HTML,然 ...
  • Jest和enzyme 前端單元測試工具 什麼是Jest? Jest是一個令人愉悅的JavaScript測試框架,其重點是簡單性。 它適用於使用以下項目的項目:Babel,TypeScript,Node,React,Angular,Vue等! 特點 零配置 快照 隔離的 很棒的api 入門 使用ya ...
  • JavaScript實現一定時長下點擊次數 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale= ...
  • TypeScript 數據類型 //字元串 let str: string = "你好ts" let str1: string = "你好typescript" //布爾 var flag: boolean = true flag = false //數字 var a: number = 123 c ...
  • 0.前言主要說明本次博客針對的作業情況 第二階段的學習也結束了,在此做一些總結和回顧;相比第一階段的學習確實難度增加了,作業的分數也不太好,完成作業需要花的時間更多了。1.作業過程總結①總結三次作業之間的知識迭代關係; 第四次作業中主要是正則表達式和繼承關係的運用,第五次作業就是關於類的繼承和多態性 ...
  • 設計模式總結 創建型模式 創建型模式隱藏了這些類的實例是如何被創建和放在一起,整個系統關於這些對象所知道的是抽象類所定義的介面。這樣,創建型模式在創建了什麼、誰創建它、它是怎麼被創建的,以及何時創建這些方面提供了很大的靈活性。 1. 單例模式 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 ...
  • 項目概述: 【備註】本項目開發流程,將依次按照上述開發步驟編排,後續將出第一篇.... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...