01-Spring 概述

Spring概述相關

  1. spring是什麼
    Spring 是分層的 Java SE/EE 應用 full-stack 輕量級開源框架,以 IoC(Inverse Of Control:
    反轉控制)和 AOP(Aspect Oriented Programming:面向切面編程)爲內核,提供了展現層 Spring
    MVC 和持久層 Spring JDBC 以及業務層事務管理等衆多的企業級應用技術,還能整合開源世界衆多
    著名的第三方框架和類庫,逐漸成爲使用最多的 Java EE 企業應用開源框架。
  2. spring的優勢
    方便解耦,簡化開發
    通過 Spring 提供的 IoC 容器,可以將對象間的依賴關係交由 Spring 進行控制,避免硬編碼所造
    成的過度程序耦合。用戶也不必再爲單例模式類、屬性文件解析等這些很底層的需求編寫代碼,可
    以更專注於上層的應用。
    AOP 編程的支持
    通過 Spring 的 AOP 功能,方便進行面向切面的編程,許多不容易用傳統 OOP 實現的功能可以通過 AOP 輕鬆應付。
    聲明式事務的支持 ,可以將我們從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活的進行事務的管理,
    提高開發效率和質量。
    方便程序的測試
    可以用非容器依賴的編程方式進行幾乎所有的測試工作,測試不再是昂貴的操作,而是隨手可
    做的事情。
    方便集成各種優秀框架
    Spring 可以降低各種框架的使用難度,提供了對各種優秀框架(Struts、Hibernate、Hessian、Quartz
    等)的直接支持。
    降低 JavaEE API 的使用難度
    Spring 對 JavaEE API(如 JDBC、JavaMail、遠程調用等)進行了薄薄的封裝層,使這些 API 的
    使用難度大爲降低。
    Java 源碼是經典學習範例
    Spring 的源代碼設計精妙、結構清晰、匠心獨用,處處體現着大師對 Java 設計模式靈活運用以
    及對 Java 技術的高深造詣。它的源代碼無意是 Java 技術的最佳實踐的範例。
  3. spring體系結構
    在這裏插入圖片描述

IoC 的概念和作用

  1. 程序的耦合度
    耦合性(Coupling),也叫耦合度,是對模塊間關聯程度的度量。耦合的強弱取決於模塊間接口的複雜性、調
    用模塊的方式以及通過界面傳送數據的多少。模塊間的耦合度是指模塊之間的依賴關係,包括控制關係、調用關
    系、數據傳遞關係。模塊間聯繫越多,其耦合性越強,同時表明其獨立性越差( 降低耦合性,可以提高其獨立
    性)。耦合性存在於各個領域,而非軟件設計中獨有的,但是我們只討論軟件工程中的耦合。
    在軟件工程中,耦合指的就是就是對象之間的依賴性。對象之間的耦合越高,維護成本越高。因此對象的設計
    應使類和構件之間的耦合最小。軟件設計中通常用耦合度和內聚度作爲衡量模塊獨立程度的標準。劃分模塊的一個
    準則就是高內聚低耦合
    它有如下分類:
    (1) 內容耦合。當一個模塊直接修改或操作另一個模塊的數據時,或一個模塊不通過正常入口而轉入另
    一個模塊時,這樣的耦合被稱爲內容耦合。內容耦合是最高程度的耦合,應該避免使用之。
    (2) 公共耦合。兩個或兩個以上的模塊共同引用一個全局數據項,這種耦合被稱爲公共耦合。在具有大
    量公共耦合的結構中,確定究竟是哪個模塊給全局變量賦了一個特定的值是十分困難的。
    (3) 外部耦合 。一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數表傳
    遞該全局變量的信息,則稱之爲外部耦合。
    (4) 控制耦合 。一個模塊通過接口向另一個模塊傳遞一個控制信號,接受信號的模塊根據信號值而進
    行適當的動作,這種耦合被稱爲控制耦合。
    (5) 標記耦合 。若一個模塊 A 通過接口向兩個模塊 B 和 C 傳遞一個公共參數,那麼稱模塊 B 和 C 之間
    存在一個標記耦合。
    (6) 數據耦合。模塊之間通過參數來傳遞數據,那麼被稱爲數據耦合。數據耦合是最低的一種耦合形
    式,系統中一般都存在這種類型的耦合,因爲爲了完成一些有意義的功能,往往需要將某些模塊的輸出數據作爲另
    一些模塊的輸入數據。
    (7) 非直接耦合 。兩個模塊之間沒有直接關係,它們之間的聯繫完全是通過主模塊的控制和調用來實
    現的。
    總結:
    耦合是影響軟件複雜程度和設計質量的一個重要因素,在設計上我們應採用以下原則:如果模塊間必須
    存在耦合,就儘量使用數據耦合,少用控制耦合,限制公共耦合的範圍,儘量避免使用內容耦合。
    內聚與耦合
    內聚標誌一個模塊內各個元素彼此結合的緊密程度,它是信息隱蔽和局部化概念的自然擴展。內聚是從
    功能角度來度量模塊內的聯繫,一個好的內聚模塊應當恰好做一件事。它描述的是模塊內的功能聯繫。耦合是軟件
    結構中各模塊之間相互連接的一種度量,耦合強弱取決於模塊間接口的複雜程度、進入或訪問一個模塊的點以及通
    過接口的數據。 程序講究的是低耦合,高內聚。就是同一個模塊內的各個元素之間要高度緊密,但是各個模塊之
    間的相互依存度卻要不那麼緊密。
    內聚和耦合是密切相關的,同其他模塊存在高耦合的模塊意味着低內聚,而高內聚的模塊意味着該模塊同其他
    模塊之間是低耦合。在進行軟件設計時,應力爭做到高內聚,低耦合。
  2. 工廠模式解耦
    在實際開發中我們可以把三層的對象都使用配置文件配置起來,當啓動服務器應用加載的時候,讓一個類中的
    方法通過讀取配置文件,把這些對象創建出來並存起來。在接下來的使用的時候,直接拿過來用就好了。 那麼,這個讀取配置文件,創建和獲取三層對象的類就是工廠。
  3. 控制反轉-Inversion Of Control
    首先,由於我們是很多對象,肯定要找個集合來存。這時候有 Map 和 List 供選擇。 那麼到底選 Map 還是 List 就看我們有沒有查找需求。有查找需求,選 Map。 在應用加載時,創建一個 Map,用於存放三層對象。 我們把這個 map 稱之爲容器。
    工廠就是負責給我們從容器中獲取指定對象的類。這時候我們獲取對象的方式發生了改變。
    以前:我們在獲取對象時,都是採用 new 的方式。是主動的。
    在這裏插入圖片描述
    現在:我們獲取對象時,同時跟工廠要,由工廠爲我們查找或者創建對象。是被動的。
    在這裏插入圖片描述
    這種被動接收的方式獲取對象的思想就是控制反轉,它是 spring 框架的核心之一。

AOP 的相關概念

  1. 何爲AOP
    簡單的說它就是把我們程序重複的代碼抽取出來,在需要執行的時候,使用動態代理的技術,在不修改源碼的基礎上,對我們的已有方法進行增強。
  2. AOP 的作用及優勢
    作用:在程序運行期間,不修改源碼對已有方法進行增強。
    優勢: 減少重複代碼、提高開發效率、維護方便 。
  3. AOP實現方式
    使用動態代理的方式
  4. AOP 相關術語
    Joinpoint(連接點):
    所謂連接點是指那些被攔截到的點。在 spring 中,這些點指的是方法,因爲 spring 只支持方法類型的
    連接點。
    Pointcut(切入點):
    所謂切入點是指我們要對哪些 Joinpoint 進行攔截的定義。
    Advice(通知/增強):
    所謂通知是指攔截到 Joinpoint 之後所要做的事情就是通知。
    通知的類型:前置通知,後置通知,異常通知,最終通知,環繞通知。
    Introduction(引介):
    引介是一種特殊的通知在不修改類代碼的前提下, Introduction 可以在運行期爲類動態地添加一些方
    法或 Field。
    Target(目標對象):
    代理的目標對象。
    Weaving(織入):
    是指把增強應用到目標對象來創建新的代理對象的過程。
    spring 採用動態代理織入,而 AspectJ 採用編譯期織入和類裝載期織入。
    Proxy(代理):
    一個類被 AOP 織入增強後,就產生一個結果代理類。
    Aspect(切面):
    是切入點和通知(引介)的結合。
  5. 學習 spring 中的 AOP 要明確的事
    開發階段(我們做的)
    編寫核心業務代碼(開發主線):大部分程序員來做,要求熟悉業務需求。
    把公用代碼抽取出來,製作成通知。(開發階段最後再做):AOP 編程人員來做。
    在配置文件中,聲明切入點與通知間的關係,即切面。:AOP 編程人員來做。
    運行階段(Spring 框架完成的)
    Spring 框架監控切入點方法的執行。一旦監控到切入點方法被運行,使用代理機制,動態創建目標對象的代理對象,根據通知類別,在代理對象的對應位置,將通知對應的功能織入,完成完整的代碼邏輯運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章