- Spring Boot開發與測試實戰
- 李泳編著
- 1997字
- 2022-12-01 18:58:58
1.2 Spring基本概念
對于初學者,想要了解Spring,需要先熟悉一些術語,如容器、POJO、Bean、耦合度、依賴、依賴注入等,下面分別進行介紹。
1.容器
生活中的容器是用于盛放東西的器具。從程序的角度來看,容器是裝“對象”的對象,管理對對象的整個生命周期,即負責從創建、獲取到回收的全過程。
2.POJO
POJO即簡單舊式Java對象,是指那些不依賴任何特定環境的類或接口。POJO沒有從任何類繼承,沒有實現任何接口,也沒有被其他框架注入。
3.Bean
Bean就是由容器初始化、裝配和管理的對象。Spring的核心是IoC容器。容器的職能包括對應用程序對象進行實例化、初始化和裝配,以及在對象的整個生命周期中Spring的其他功能。這些被容器創建和管理的標準Java對象稱為Bean。這些Java對象都是POJO。Bean的作用如下。
● 以某種方式配置Spring(數據庫連接參數、安全性等)。
● 使用依賴注入避免硬編碼依賴項,以便代碼的類保持獨立且可進行單元測試。
4.配置元數據
配置元數據用于向容器提供相關的信息,以便實例化Bean并制訂對這些Bean進行裝配的方法。配置元數據的傳統格式是XML,可以選擇注解,或基于Java的配置元數據。容器首先獲取應用程序中編寫的類,并與配置元數據結合,然后創建和裝配Bean。
5.依賴
Spring的重要特性是依賴注入。想要了解依賴注入,需要先了解什么是依賴。我們先看架構層的依賴。一個典型的Java應用程序的體系結構包含Web層、業務層和數據層。其中,Web層依賴業務層,業務層是Web層的依賴項;業務層依賴數據層,數據層是業務層的依賴項。關于類級別的依賴例子如下列代碼所示,BookImpl是業務類,它的實現方法需要使用productDo和itemDo這兩個數據層類,因此productDo和itemDo是BookImpl的依賴項。
@Service public class BookImpl implemented Book { @Autowired Product productDo; @Autowired Item itemDo; @Override public int getBookSum(int isdn) { ... }
6.非侵入式設計
從程序角度來看,如果不需要繼承框架提供的類,這種設計就可以看作非侵入式設計。如果繼承了框架提供的類,并且想要更換框架,則無法重用之前的代碼。如果程序采用了非侵入式設計,那么舊的代碼任何時候都可以進行重用。
7.輕量級
輕量級設計一般是指非侵入式設計,依賴項比較少,容易部署和使用。和輕量級設計相對應的是重量級設計,它一是侵入式指設計,通常很難對它進行重構。
8.依賴注入
依賴注入是指在Spring創建對象的過程中,將對象所依賴的屬性注入。依賴注入讓相互協作的軟件保持松耦合,其目的是提高組件重用的頻率,并為系統搭建一個靈活可擴展的框架。通過依賴注入機制,只需要簡單的配置,無須任何代碼,就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處、由誰實現。
9.耦合度
耦合度表示結合的緊密程度。在程序中,耦合度是指模塊間關聯和依賴的程度。耦合度的高低取決于模塊間接口的復雜度、調用模塊的方式,以及通過界面傳送數據的規模。模塊間的耦合是指模塊之間的依賴關系,包括控制關系和調用關系、數據傳遞關系。模塊間聯系越多,其耦合度越高,同時表明其獨立性越弱,降低耦合度,可以增強其獨立性。
10.控制反轉
Spring框架最重要的特性是依賴注入。所有Spring模塊的核心是依賴注入或控制反轉。當正確使用依賴注入時,我們可以開發出低耦合的應用程序,同時,可以輕松地對該低耦合的應用程序進行單元測試。
控制反轉是指創建的對象責任的反轉,就是將原本在程序中手動創建對象的控制權交由容器管理,由容器創建對象并將它們注入應用程序。把對象的創建交給外部容器完成的過程稱為控制反轉。為什么稱為控制反轉呢?因為傳統的方法是直接在對象內部通過new()方法創建對象,是主動創建依賴對象的方式,而現在由容器來創建對象并注入依賴對象。
控制反轉的優點如下。
● 控制反轉使代碼低耦合。
● 控制反轉可以幫助程序員輕松地編寫出色的單元測試用例。
下面先看一個沒有控制反轉的例子(傳統的實現方法)。
@RestController public class WelcomeController { private WelcomeService service = new WelcomeService(); @RequestMapping("/welcome") public String welcome() { return service.retrieveWelcomeMessage(); } }
上面的代碼中,WelcomeController依賴WelcomeService,從而獲取歡迎消息。WelcomeController類直接創建了一個實例WelcomeService,這意味著它們緊密關聯。這是傳統的實現方法。這種方法在代碼中直接創建一個依賴對象,代碼產生了高耦合。在這種情況下,當進行單元測試時,為WelcomeService創建一個模擬的對象很困難。接下來,我們看一個用控制反轉實現低耦合的例子(使用Spring解耦)。
@Component public class WelcomeService { ... } @RestController public class Welcome Controller { { @Autowired WelcomeService service; @RequestMapping("/welcome") public String welcome() { return service.retrieveWelcomeMessage(); } }
在上面的例子中,使用Spring的兩個簡單的注解——@Component和@Autowired。首先,通過@Component通知Spring框架,這里有一個需要管理的Bean。然后,通過@Autowired通知Spring框架,需要找到這個特定Bean的正確匹配并自動加載它。在上面的代碼中,Spring將為WelcomeService創建一個Bean,并將其自動加載到WelcomeController中。在單元測試中,要求Spring將WelcomeService的模擬實例自動連接到WelcomeController。在Spring Boot中,使用@MockBean實現,具體過程請參考下文。現在,Spring框架自動裝配WelcomeService到WelcomeController的依賴關系。在為WelcomeController編寫單元測試用例時,使用WelcomeService模擬對象而不是實際依賴項。
11.AOP
在面向對象的編程過程中,不可避免地會出現代碼重復問題。面向切面編程(Aspect Oriented Programming,AOP)對這些重復代碼進行管理,將解決某個切面問題的代碼單獨放在某個模塊中,再植入程序。簡單來說,AOP允許你把遍布應用程序各處的功能分離以形成可重用的組件。
- 大學計算機基礎實驗教程
- Windows系統管理與服務配置
- PyTorch Artificial Intelligence Fundamentals
- 數據結構簡明教程(第2版)微課版
- Python編程完全入門教程
- MATLAB實用教程
- 青少年Python編程入門
- Python面向對象編程:構建游戲和GUI
- Hadoop大數據分析技術
- Learning Bootstrap 4(Second Edition)
- 游戲設計的底層邏輯
- Java語言程序設計實用教程(第2版)
- Implementing Splunk(Second Edition)
- Hands-On Artificial Intelligence with Unreal Engine
- Python數據科學實戰