《Spring實戰(zhàn)》筆記
第一部分 Spring的核心
Spring所有的功能都依賴于它的兩個核心特性——依賴注入(Dependency Injection,DI)和面向切面編程(Aspect-Oriented Programming,AOP)。
Spring最根本的使命是簡化Java開發(fā)。
為了降低Java開發(fā)的復雜性,Spring采取了以下4種關鍵策略:
- 基于POJO的輕量級和最小侵入性編程;
- 通過依賴注入和面向接口實現(xiàn)松耦合;
- 基于切面和慣例進行聲明式編程;
- 通過切面和模板減少樣板式編程。
通過DI,對象的依賴關系將由框架負責,對象無需自行創(chuàng)建或管理它們的依賴關系,這就是DI所帶來的最大收益——松耦合。如果一個對象只通過接口(而不是具體實現(xiàn)或初始化過程)來表明依賴關系,那么這種依賴就能夠在對象本身毫不知情的情況下,用不同的具體實現(xiàn)進行替換。
DI能夠讓相互協(xié)作的組件保持松散耦合,而面向切面編程(AOP)允許你把遍布應用各處的功能分離出來形成可重用的組件。
創(chuàng)建對象之間協(xié)作關系的行為稱作裝配(wiring),這也是依賴注入(DI)的本質(zhì)。
在Spring中裝配bean最常見的有3種方式:在XML中進行顯式配置、在Java中進行顯式配置、隱式的bean發(fā)現(xiàn)機制和自動裝配。
Spring框架的核心是Spring容器。容器負責管理應用中組件的生命周期,它會創(chuàng)建這些組件并保證它們的依賴能夠得到滿足。
面向切面的Spring
在軟件開發(fā)中,散布于應用中多處的功能被稱為橫切關注點。通常來講,這些橫切關注點從概念上是與應用的業(yè)務邏輯相分離的(但是往往會直接嵌入到應用的業(yè)務邏輯之中)。把這些橫切關注點與業(yè)務邏輯相分離正是面向切面編程所要解決的問題。
DI有助于應用對象之間的解耦,而AOP可以實現(xiàn)橫切關注點與它們所影響的對象之間的解耦。
切面是通知和切點的結(jié)合。通知和切點共同定義了切面的全部內(nèi)容——它是什么,在何時和何處完成其功能。
引入:引入允許我們向現(xiàn)有的類添加新的方法或?qū)傩裕鵁o需修改這些類。
織入:織入是把切面應用到目標對象并創(chuàng)建新的代理對象的過程。
在運行期,AOP容器會為目標對象動態(tài)的創(chuàng)建一個代理對象。Spring AOP就是以這種方式織入切面的。
Spring AOP構(gòu)建在動態(tài)代理基礎之上,因此,Spring對AOP的支持局限于方法攔截。
下面是一個定義好的切面:
@Aspect
public class Audience {
// 切點+通知
@Before("execution(** concert.Performance.perform(..))")
public void silenceCellPhone() {
System.out.println("Silnecing cell phones");
}
@After("execution(** concert.Performance.perform(..))")
public void applause() {
System.out.println("CLAP CLAP CLAP!!!");
}
}
Web中的Spring

DispatcherServlet是Spring MVC的核心。在這里請求會第一次接觸到框架,它要負責將請求路由到其他的組件之中。
將控制器中請求處理的邏輯和視圖中的渲染實現(xiàn)解耦是Spring MVC的一個重要特性。控制器只通過邏輯視圖名來了解視圖,而將邏輯視圖名映射為具體的視圖則是視圖解析器的任務了。
Spring 集成
借助Spring Boot簡化Spring開發(fā)
Spring Boot的四個主要特性:
- Spring Boot Starter:它將常用的依賴分組進行了整合,將其合并到一個依賴中,這樣就可以一次性添加到項目的Maven或Gradle構(gòu)建中;
- 自動配置:Spring Boot的自動配置特性利用了Spring 4對條件化配置的支持,合理地推測應用所需的bean并自動配置它們;
- 命令行接口:Spring Boot的CLI(Commond-Line Interface)發(fā)揮了Groovy語言的優(yōu)勢,并結(jié)合自動配置進一步簡化了Spring應用的開發(fā);
- Actuator:它為Spring Boot應用添加了一定的管理特性