SpringInAction讀書筆記--第1章Spring之旅

来源:http://www.cnblogs.com/yumo/archive/2016/12/03/6127976.html
-Advertisement-
Play Games

1.簡化Java開發 Spring是一個開源框架,它的根本使命在於簡化java開發。為了降低java開發的複雜性,Spring採取了以下4種關鍵策略: 1.基於POJO的輕量級和最小侵入性編程; 有很多框架強迫應用繼承它們的類或實現它們的介面從而導致應用與框架綁死,而基於Spring構建的應用通常沒 ...


1.簡化Java開發

       Spring是一個開源框架,它的根本使命在於簡化java開發。為了降低java開發的複雜性,Spring採取了以下4種關鍵策略:

       1.基於POJO的輕量級和最小侵入性編程;
       有很多框架強迫應用繼承它們的類或實現它們的介面從而導致應用與框架綁死,而基於Spring構建的應用通常沒有任何痕跡表明你使用了Spring,最壞的場景是一個類或許會用到Spring註解,但它依舊是POJO。

       2.通過依賴註入和麵向介面實現松耦合;
       任何應用都會由多個類相互協作完成業務邏輯,按照傳統做法,每個對象負責管理與自己協作的對象的引用,這會導致代碼高度耦合和難以測試。通過依賴註入(DI),對象的依賴關係由Spring負責管理,對象無需創建或管理它們的依賴關係,依賴關係將被自動註入到需要到它們的對象中去。通過面向介面,依賴能夠用不同的具體實現進行替換。創建組件之間協作的行為通常稱為裝配,Spring通過應用上下文裝載bean的定義並把它們組裝起來,Spring應用上下文全權負責對象的創建和組裝。Spring有多種應用上下文的實現,它們的區別在於載入配置的方式不同。

       3.基於切麵和慣例進行聲明式編程;
       面向切麵編程(AOP)能夠將遍佈應用各處的功能分離出來形成可重用的組件。AOP能夠使諸如日誌、事務管理和安全這些服務模塊化,並以聲明的方式將它們應用到需要它們影響的組件中去。這樣這些組件會具有更高的內聚性並且會更加關註自身的業務。AOP能夠確保POJO的簡單性。

       4.通過切麵和模板減少樣板式代碼。
       Spring旨在通過模板封裝來消除樣板式代碼。

2.容納你的Bean

       在基於Spring的應用中,應用對象生存於Spring容器中,Spring容器負責創建對象,裝配它們,配置它們並管理它們的整個生命周期。Spring自帶多個容器實現,可以歸為兩種不同的類型。bean工廠是最簡單的容器,提供基本的DI支持。應用上下文基於BeanFactory構建,提供應用框架級別的服務,通常選擇應用上下文作為Spring容器的實現。Spring容器中的bean的生命周期相對複雜,正確理解Spring bean的生命周期非常重要,因為你或許要利用Spring提供的擴展點來自定義bean的創建過程。

3.俯瞰Spring風景線

    Spring的核心在於DI和AOP,Spring框架包含多個模塊,為開發企業級應用提供了所需的一切,但開發者不必將應用建立在整個Spring框架之上,可以選擇自身應用需求的Spring模塊,當Spring不能滿足需求時,也可以考慮其它選擇,Spring提供了與其它第三方框架和類庫的集成點。

3.1.Spring模塊

       1.Spring核心容器
       容器是Spring框架最核心的部分,它管理Spring應用中bean的創建、配置和管理。該模塊包括了Bean工廠和基於Bean工廠的多種Spring應用上下文的實現。除此之外,該模塊提供了許多企業級服務,如E-mail、JNDI訪問、EJB集成和調度。

       2.Spring的AOP模塊
       這個模塊是Spring應用中開發切麵的基礎,與DI一樣,AOP可以幫助應用對象解耦。藉助於AOP,可以將遍佈系統的關註點(例如事務和安全)從它們所應用的對象中解耦出來。

       3.數據訪問與集成
       通過JDBC編寫代碼通常會導致大量的樣板式代碼,Spring的JDBC和DAO模塊抽象了樣板式代碼,使資料庫代碼變得簡單明瞭。Spring也提供了ORM模塊,Spring的ORM模塊建立在對DAO的支持之上,併為多個ORM框架提供了一種構建DAO的簡便方式,Spring集成了多個流行的ORM框架。本模塊包含了在JMS之上構建的Spring抽象層,它會使用消息以非同步的方式與其它應用集成。本模塊還包含對象到XML映射的特性,它最初是Spring Web Service項目的一部分。除此之外,本模塊會使用Spring AOP模塊為Spring應用中的對象提供事務管理服務。

       4.Web與遠程調用
       MVC模式是一種普遍被接受的構建Web應用的方法,本模塊自帶了一個強大的MVC框架,有助於在Web層提供應用的松耦合水平。該模塊還提供了多種構建與其它應用交互的遠程調用方案。Spring遠程調用功能集成了RMI、Hessian、Burlap、JAX-WS,同時還自帶了一個遠程調用框架HTTP invoker。Spring還提供了暴露和使用REST API的良好支持。

       5.Instrumentation
       本模塊提供了為JVM添加代理的功能。本模塊的使用場景非常有限。

       6.測試
       Spring提供了測試模塊以致力於Spring應用的測試。Spring為使用JNDI、Servlet和Portlet編寫單元測試提供了一系列的mock對象實現。對於集成測試,該模塊為載入Spring應用上下文中的bean集合以及Spring上下文的bean進行交互提供了支持。

3.2.Spring Portfolio

    Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫,包括Spring Web Flow(基於流程的會話式Web應用,如購物車、嚮導功能)、Spring Security(利用AOP,Spring Security為Spring應用提供了聲明式的安全機制)、Spring Data(為多種資料庫類型,無論是關係型資料庫還是NoSQL資料庫,都提供了一種簡單的編程模型)、Spring Boot(簡化Spring本身,Spring Boot大量依賴於自動配置技術,能夠消除大部分Spring配置)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、流程分析: 1. 請求發送給 StrutsPrepareAndExecuteFilter 2. StrutsPrepareAndExecuteFilter 詢問 ActionMapper: 該請求是否是一個 Struts2 請求(即是否返回一個非空的 ActionMapping 對象) 3. 若 ...
  • 冪等概念來自數學,表示N次變換和1次變換的結果是相同的。這裡討論在某些場景下,客戶端在調用服務沒有達到預期結果時,會進行多次調用,為避免多次重覆的調用對服務資源產生副作用,服務提供者會承諾滿足冪等。 ...
  • map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。 例如,對於list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每個元素都作平方,就可以用map( ...
  • 前邊我們說過了 Http協議 有兩個缺陷 一個是無狀態 、 一個是純文本 。 純文本也就是說Http請求中的內容都是以字元串的形式發送的。 但是Java又是一個強類型語言,所以將一個字元串轉換成Java中的數據類型這一重任就落在了Struts2的肩膀上。 類型轉換最常見的可能就是將將10/29/20 ...
  • 系統環境 ubuntu 14.04 LTS vsftpd安裝 配置文件 預設配置文件的位置為 /etc/vsftpd.conf 常見問題 500 OOPS: vsftpd: refusing to run with writable root inside chroot 解:所設置的目錄不能有寫許可權 ...
  • 2016-12-03 數組定義字元串: 每次定義數組的時候,系統都會在記憶體開闢你指定數組大小的空間,並且數組中的內容對於我們是可讀可寫的,看如下代碼: 1 #include<stdio.h> 2 int main() 3 { 4 char str[100] = "hello world"; 5 ch ...
  • 原文:http://www.cnblogs.com/imaker/p/6128049.html 所屬年份:2010.9;2012.3編寫函數fun,其功能是:根據以下公式求π的值(要求精度0.0005,即某項小於0.0005時停止迭代)。 程式運行後,若輸入精度0.0005,則程式應輸出為3.14… ...
  • 如下是作業,用python做一個ftp,主要利用socket。 server端在linux下運行,在client端可以執行shell命令(靜態的) 在client端輸入get xxx,即可下載。 在client端輸入put xxx,即可上傳。 server端: client端: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...