爲什麼學習Spring,什麼是Spring

什麼是Spring

Spring 是分層的 Java SE/EE 應用 full-stack 輕量級開源框架,以
IoC(nverse Of Control:反轉控制)
AOP(Aspect Oriented Programming:面向切面編程)
爲內核,提供了展現層 Spring MVC 和持久層 Spring JDBC 以及業務層事務管理等衆多的企業級應用技術,還能整合開源世界衆多著名的第三方框架和類庫,逐漸成爲使用最多的 Java EE 企業應用開源框架

簡化java開發

爲了降低Java開發的複雜性,Spring採用了以下4種關鍵策略

  • 基於POJO的輕量級和最小侵入性編程
  • 通過依賴注入和麪向接口實現鬆耦合
  • 基於切面和慣例進行聲明式編程
  • 通過切面和模板減少樣板式代碼

在這裏,我們只需要有一個Spring能簡化java開發的概念,在接下來的文章中我們會具體感受爲什麼會簡化開發

程序耦合:
現在有KnightQuest騎士和探險兩個接口,RescueQuest實現了Quest接口,它只能進行拯救任務

public class BraveKnight implements Knight{
	private RescueQuest quest;
	public BraveKnight (){
		this.quest = new RescueQuest ();
	}
	public void actionOnQuest(){
		quest.action();
	}
}

可以看到,BraveKnight 在它的構造函數中自行創建了RescueQuest對象,這使得這兩個對象高度耦合,而且這個騎士類的功能也受到限制,只能執行拯救任務,如果有其他探險比如殺掉一條龍這裏不能完成,更糟糕的是在單元測試中必須當保證騎士的actionOnQuest()被調用的時候,探險類的action()也要被執行,這將導致代碼難以測試,難以複用,一個地方出現Bug,將會導致更多地方出現bug
如何解耦
通過工廠模式解耦:
在傳統的獲取對象的方式是通過new來獲取對象,是主動的獲取
在這裏插入圖片描述
現在我們獲取對象時,同時跟工廠要,有工廠爲我們查找或者創建對象。是被動的。
在這裏插入圖片描述
這種被動接收的方式獲取對象的思想就是控制反轉,它是 spring 框架的核心之一,那麼什麼是控制反轉呢:

控制反轉(Inversion of Control簡寫爲IoC)

概念:

  • 控制反轉(Inversion of Control簡寫爲IoC,把對象的創建交給框架,它包括依賴注入和依賴查找,它的作用是降低程序間的耦合(依賴關係)

依賴注入:
**依賴注入(Dependency Injection,簡稱DI)**它的作用就是讓對象之間保持鬆散耦合,具體實現由spring容器提供,在傳統開發中:一個類中包含其他類的對象,比如BraveKnight 類中的RescueQuest對象,騎士依賴探險,它們之間的關係被稱爲依賴關係BraveKnight負責管理與自己相互協作的對象的引用RescueQuest quest,這會導致程序的高度耦合

我們知道了可以通過工廠模式機型解耦,在Spring中,對象的依賴關係通過依賴注入(DI)由系統中負責協調各對象的第三方組件在創建對象的時候進行設定,這裏的第三方組件就是我們所說的工廠,在spring中的體現爲Spring容器

在這裏插入圖片描述
如圖所示,依賴注入會將所依賴的關係自動交給目標對象,而不是讓對象自己去獲取依賴,依賴關係將被自動注入到他們的對象中去
下面我們通過一個案例來了解一下具體的執行過程:

/**
*探險類接口
*/
public interface Quest {
    public void action();
}
/*
*騎士接口
*/
public interface Knight { }
/**
*	騎士類
*/
public class BraveKnight implements Knight {

    private Quest quest;

    public BraveKnight(Quest quest) {
        this.quest = quest;
    }

    public void actionOnQuest(){
        quest.action();
    }
}
/**
*探險類
*/
public class RescueQuest implements Quest {
    public void action() {
        System.out.println("執行拯救任務");
    }
}

我們改動了BraveKnight的結構,將quest的實現通過構造器的方式實現注入,只要實現了Quest接口都可以傳進來,這就保證了騎士可以完成不同的探險任務
在這裏插入圖片描述
除了XML進行配置還可以基於java的配置,在這裏不予演示
通過上述代碼我們就可以回答之前的問題:爲什麼會簡化開發,
spring還有其他簡化開發的方式,這裏只介紹了IoC依賴注入來展示

Spring的體系結構:

在這裏插入圖片描述
讓我們分別瀏覽這些模塊

  • Spring核心容器
    容器是Spring框架最核心的部分,它管理着Spring應用中bean的創建,配置和管理,在該模塊中包括了Spring bean工廠,它爲Spring提供了DI功能,基於bean工廠我們還會發現有多種Spring上下文實現的方式,每一種都提供了配置Spring的不同方式
  • SpringAOP模塊
    面向切面編程
  • 數據訪問與集成
    有不同的方式實現,可以是Spring Data JPA或Mybatis或其他ORM,也可以是Spring中的JDBC模板
  • Web與遠程調用
    MVC模式是一種被普遍接受的構建web應用的方法,如當前流行的springmvc框架

當我們具體的開發一個企業級Java應用時,這些模塊都會提供我們所需要的一切,我們只需要在pom文件中導入需要的座標即可,我們可以根據需求自主搭配相應的模塊而不是將整個應用完全建立在Spring框架之上,比如數據訪問與集成,可以用Spring來整合其他的框架比如Mybatis而不是Spring提供的Spring Data了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章