Spring(一)框架簡介
Spring是什麼?
Spring是分層的JAVAEE應用一站式的輕量級開源框架,以控制器反轉(IoC)和麵向切面程式設計(AOP)為核心,提供了表現層SpringMVC、持久層SpringJDBC以及業務層事物管理等眾多的企業級應用技術。
特點:
方便解耦,簡化開發(核心):
通過Spring提供的IoC容器,可以將物件之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。AOP程式設計的支援(核心):
通過Spring提供的AOP功能,使用者可以方便進行面向切面程式設計,許多不容易用傳統面向物件程式設計(OOP)實現的功能都可以通過AOP輕鬆應對。宣告式事物的支援(核心):
通過Spring的宣告式事物靈活地進行事物管理,提高開發效率和質量。方便的程式測試:
可以用非容器依賴的程式設計方式進行幾乎所有的測試工作。方便整合各種優秀框架
降低JavaEEAPI的使用難度
Spring原始碼德海經典的學習範例
架構:
架構和工作原理:
IoC(控制反轉):
控制反轉就是應用本身不負責依賴物件的建立及維護,依賴物件的建立及維護是由外部容器負者的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂的反轉。控制權轉移帶來的好處就是降低了業務物件之間的依賴程度。
DI:IoC的一個重點是在系統執行中,動態的向某個物件提供它所需要的其他物件。這一點通過DI來實現的。
依賴注入是組裝應用物件的一種方式:物件無需知道依賴來自何處或者依賴的實現方式。依賴物件通常只能通過介面瞭解所注入的物件,這樣就能確保低耦合。
依賴注入的方式:
- 構造器注入
- 方法注入
- 介面注入
- 注意:Spring的IoC容器只支援構造器和方法注入
ApplicationContext:應用上下文
Spring有幾種獲取ApplicationContext應用上下文例項的方式:
- ClaaaPathXmlApplicationContext-從類路徑下的XML配置檔案中載入上下文定義,把應用上下文定義檔案當做類資源
- FileSystemXmlApplicationContext-讀取檔案系統下的XML配置檔案並載入上下文定義
- XMLWebApplicationContext-讀取Web應用下的XML配置檔案並載入上下文定義
裝配Bean:
- 所謂裝配Bean就是指建立應用物件之間協作關係的行為,這是依賴注入的本質。
- Spring通過配置檔案的方式定義Bean以及Bean與Bean之間的關係!
- Spring支援多種形式Bean配置方式:1)基於XML配置、2)註解的配置、3)Java類的配置
Bean的作用域:
在Spring容器中,所有的Bean預設都是單例。
內部Bean注入:
內部Bean的特點是不能被複用。每部Bean僅適用於一次注入,而且不能被其他Bean所引用。
SpEL表示式:
SpEL是一種強大、簡介的裝配Bean的方式,它通過執行期執行的表示式將值裝配到Bean的屬性或構造器引數中。
特性:
- 呼叫方法和訪問物件的屬性
- 使用Bean的id來引用Bean
- 對值進行算術、關係和邏輯執行
- 正則表示式匹配
簡化Bean配置
1、自動裝配:用於減少甚至消除配置< peoperty>元素和< construtor-arg>元素,讓Spring自動識別任何裝配Bean的依賴關係
2、自動檢測:用於讓Spring能夠自動識別哪些類需要被裝配成Bean,從而減少對< bean>元素的使用
AOP(面向切面過程):
概念:通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。
AOP與OOP的區別:AOP和OOP在字面上雖然非常類似,但確實面向不同領域的兩種設計思想。這兩種設計思想在目標上有著本質的差異。
OOP(面向物件程式設計):針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲取更加清晰高效的邏輯單元劃分。
AOP(面向切面程式設計):針對業務處理過程中的切面進行提取,它所面對的是處理過程的某個步驟或階段,以獲得邏輯過程中各部分之間的低耦合性的隔離效果。
總結:AOP絕對不會代替OOP,而是與OOP整合起來,一次之長,補彼之短。
一、橫切關注點:在軟體開發中,分佈於應用中多處的功能被稱為橫切關注點。
AOP的主要功能:
- 日誌記錄、
- 效能統計、
- 安全控制、
- 事物處理、
- 異常處理、
- 其他功能
1、連線點(Joinpoint)(就是要插入程式碼的位置):程式執行的某個特點位置(如類開始初始化前、類初始化後。類某個方法呼叫前、呼叫後、方法跑吹異常後)。一個類或一段程式程式碼擁有一些具有邊界性質的特定點,這些程式碼中的特點的點就稱為連線點。
注意:Spring僅支援方法的連線點,即僅能在方法呼叫前、方法呼叫後、方法丟擲異常時以及方法呼叫前後這些程式執行點織入增強。
2、切點(Pointcut)(查詢連線點的方式或條件):每個類一般都擁有多個連線點(一般一個方法就是一個連線點)。AOP需要定位到特定的連線點,而定位連線點的方式就是切點。連線點相當於資料庫中的記錄,而切點相當於查詢條件,一個切點可以匹配多個連線點。
注意:Spring中切點同Pointcut介面定義,它使用類和方法作為連線點的查詢條件。SpringAOP的規則解析引擎負者解析切點所設定的查詢條件,找到對應的連線點。
3、增強(advice)(插入的程式碼):增強是織入目標類連線點上的一段程式程式碼。在Spring中,增強除用於描述一段程式程式碼外,還擁有另一個和連線點相關的資訊-執行點的的方法。結合執行點的方法資訊和切點資訊,AOP就可以找到特點的連線點。
- BeforeAdvice:表示方法呼叫前的位置
- AfterReturnAdvice:表示方法呼叫返回後的位置
- ThrowsAdvice:表示丟擲異常的位置
4、目標物件(Target):它是增強邏輯的織入目標類。通過AOP業務邏輯類只需要實現非橫切邏輯的程式碼,而效能監視、事物管理等橫切邏輯則可以使用AOP動態織入到特點的連線點上。
5、引介(Introduction):引介是一種特殊的增強,它為類新增一些屬性和方法。即使一個業務類原本沒有實現某個介面,也可以通過AOP引介功能,動態地位該業務類新增介面的實現邏輯,讓業務類成為這個介面的實現類。
6、織入(Weaving):織入是將增強新增對目標類具體連結點上的過程。AOP有三種織入方式:
- 編譯器織入:要求使用特殊Java編譯器
- 類裝置期織入:要求使用特殊的類裝載器
- 動態代理織入:在執行期為目標列新增增強生成子類的方式
7、代理(Proxy):一個類被AOP織入增強後,就產出了一個結果類,它是融合了原類和增強邏輯的代理類。根據不同的代理方式,代理類即可能是原類具有相同介面的類,可可能就是原類的子類。所以,可以採用呼叫原類相同的方式呼叫代理類。
8、切面(Aspect):切面由切點和增強或引介組成。它即包括了橫切邏輯的定義,可包括了連線點的定義。
注意:springAOP負者實施切面的框架,它將切面所定義的橫切邏輯織入到切面所指定的連線點。
SpringAOP:使用純JAVA實現,它不需要專門的編譯過程,也不需要特殊的類裝載器,它在執行期通過代理的方式向目標類織入增強程式碼。SpringAOP使用了兩種代理機制:JDK動態代理和CGLib動態代理,他們是SpringAOP底層技術。
增強型別:Spring使用增強介面定義橫切邏輯,同時由於Spring只支援方法連線點,所以增強即包含橫切邏輯,還包含部分連線點資訊。
Spring增強型別如下:
前置增強:BeforeAdvice類代表前置增強,表示在目標方法執行前實施增強
後置增強:AfterReturningAdvice介面代表後置增強,表示在目標方法執行後實施增強
環繞增強:MethodInterceptor介面代理環繞增強,表示在目標方法執行前面實施增強
異常丟擲增強:ThrowsAdvice介面代表丟擲異常增強,表示在目標方法丟擲異常後實施增強
###事物管理
###資料持久層