官术网_书友最值得收藏!

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允許你把遍布應用程序各處的功能分離以形成可重用的組件。

主站蜘蛛池模板: 恩平市| 吉林市| 原阳县| 甘泉县| 岳普湖县| 文化| 江口县| 马尔康县| 星子县| 东乡| 焦作市| 桃园市| 九龙城区| 定安县| 铁岭县| 错那县| 东山县| 宣威市| 高邮市| 隆子县| 阿拉善盟| 沙坪坝区| 七台河市| 平利县| 云和县| 岑巩县| 青川县| 贡觉县| 巴楚县| 营口市| 九龙坡区| 岳普湖县| 房产| 乡宁县| 洞口县| 林芝县| 定边县| 眉山市| 四会市| 桂东县| 冷水江市|