spring篇(一)牛刀小試

周培公發表於2020-10-20

spring大觀園

1.什麼是spring?
spring:是以interface21為基礎,並不斷的豐富其內涵的,由Rod Johnson建立的一個輕量級框架。(順便提一句,這位大佬是悉尼大學的博士,然而他的專業不是計算機相關的,而是音樂學!!!
其根本使命是:解決企業級應用開發的的複雜性。
核心特徵:IOC(控制反轉)、AOP(面向切面)。
2.spring框架組成
在這裡插入圖片描述
在這裡插入圖片描述
3.spring的優勢?
簡化開發、實現解耦
AOP程式設計
支援宣告式事務處理
方便程式測試
可以整合多種框架

spring IOC

1.什麼是IOC?
IOC:全稱 Inversion of Control,也叫“控制反轉”,它還有一個別名“依賴注入(Dependency Injection)”.是一個輕量級的容器。
IOC的理念:簡單點說,就是讓別人為你服務!!!
IOC最權威的解釋和總結,應該是Martin Fowler的那篇文章“Inversion of Control Containers and the Dependency Injection Pattern”翻譯過來是:控制反轉容器和依賴注入容器。
我個人對IOC理解:IOC 控制反轉就是一種思想,有點像中介的感覺,就比如我們去買房,如果是自己去呢我們是不是要一個一個的去找,這樣是不是很浪費我們的時間,但是你通過中介,你把要需要買的房的預期告訴他,就比如大小、地址、價格、裝修等等。中介是不是就會去找合適的房子來供你參考啊!這樣一來我們是不是大大縮短了時間成本。再深一點理解,中介就好比“IOC容器”,我們買房子的就是“被注入物件”,房子就是“被依賴的物件”,而房子的大小、價格、地段就是“依賴物件的引數”。IOC就是把傳統上程式程式碼直接控制物件的呼叫權交給容器,通過容器來實現對物件的元件的管理和裝配。在這裡插入圖片描述
2.依賴注入的三種方式?
2.1構造方法注入
構造方法注入:顧名思義,就是被注入的物件通過構造方法中宣告被依賴物件的引數列表,讓IOC容器知道它需要哪些依賴的物件。
例如:

public FXNewProvider(IFNewsListener newsListener,IFXNewspersister newsPersister){
    this.newsListener = newsListener;
    this.newsPersiter = newsPersister;
}

IOC Service Provider會檢查被注入物件的構造方法,取得它需要的依賴物件列表,進而為其注入相應的物件,注意:同一個物件不可能同時被構造兩次!!!
2.2setter方法注入
對於javaBean物件來說,通常會通過setxxx()和getxxx()來訪問對應屬性。這些setxxx()統稱為setter方法。

public class Component{
		priavte Dog dog;
		
		public Dog setDog(Dog dog){
			this.dog = dog;
		}
 
 
		public doSomething(){
			dog.speek();
		}
	}

2.3介面注入
這個比起前兩個稍微有點難。被注入的物件如果想要IOC Service Provider為其注入物件,就必須實現某個介面。而這個介面提供一個方法,用來為其注入依賴物件。IOC Service Provider最終通過這些介面瞭解被注入物件需要注入什麼依賴物件。在這裡插入圖片描述

public interface InjectTion{//通用注入介面
		void injectA(Object obj); //其中obj的值通過容器設定
	}
	
	public class Component implements interface{
		priavte Dog dog;
		
		public void inject(Dog dog){//實現注入方法
			this.dog = dog;
		}
 
 
		public doSomething(){
			dog.speek();
		}
	}

2.4三種注入方式的比較
介面注入不提倡,退役狀態。它強制注入物件實現不必要的介面,帶有侵入性。
構造方法注入
優點:物件在構造完成後,已進入就緒狀態,可以馬上使用。
缺點:(i)依賴物件多的時候,構造方法的引數列表較長。
(ii)通過反射構造物件時,對仙童型別的引數處理會比較困難,維護和使用比較麻煩。
(iii)在java中,構造方法無法繼承,無法設定預設值。
setter方法注入
優點:(i)在描述性比構造方法注入要好一點。
(ii)setter方法可以被繼承,允許設定預設值。
(iii)具有良好的IDE支援。
缺點:物件無法在構造完成後,馬上進入就緒狀態。

相關文章