Spring Boot入門(三)怎麼理解依賴反轉(IOC)和依賴注入(DI)

1、怎麼理解控制反轉(Inversion of Control)

看一個生活中的例子:java

項目組向資源管理者申請資源,資源管理者向資源池協調資源,資源池分配資源給項目組,資源是資源池分配給項目組,而不是項目組本身招人。

這裏的好處顯而易見,就是項目組不須要關注招人,面試,談待遇等等一堆事情,只須要提出用人要求就能夠。面試

對應到代碼中:微信

Class A使用到了Class B,但Class B不是被Class A建立,Class A只需聲明要使用Class B,由容器建立Class B並注入A,建立Class B的控制權不在Class B的調用者Class A上,而是容器,這就是控制反轉。

這裏的好處是Class A不須要關注要使用的類如何建立,只須要聲明要使用該類則可,由容器來建立並注入這個類。post

而容器怎麼分配Class B給Class A就引出了依賴注入(DI)。單元測試

2、依賴注入方式(Dependency Injection)

容器要想注入Class B給Class A的幾種方式:測試

1.構造器注入:this

Class A
  private B b;
  
  @Autowired
  public A(B b) {
    this.b = b;
  }
}
複製代碼

2.參數注入spa

Class A

  @Autowired
  public void exec(B b) {
    b.doSomeThing();
  }
}
複製代碼

3.屬性注入code

Class A
  @Autowired
  private B b;
  
  public void exec() {
    b.doSomeThing();
  }
}
複製代碼

3、依賴注入的好處

本質的好處是解耦,而Spring的依賴注入體現爲如下好處:cdn

1.容易測試,依賴的對象是注入的,所以能夠在單元測試時Mock一個對象並注入來測試
比較如下代碼:

Class A {
  public void exec() {
    B b = new B();
    b.doSomeThing();
  }
}

Class A {
  public void exec(B b) {
    b.doSomeThing();
  }
}
複製代碼

第一種方式Class B是在方法內部自行構建的,測試時沒有辦法Mock,而第二種方式則能夠Mock Class B後傳入。

2.不須要本身實現單例模式,Spring中的Bean默認都是單例模式,單例的做用是減小類實例,從而減小內存佔用,而且不用每次使用時都從新實例化,提升效率。

3.基於依賴注入使得容器能夠統一管理Bean以及Bean的生命週期,在Bean的生命週期管理時,能夠統一實現一些通用的公共邏輯,而不須要每一個Bean單獨再實現一遍。

end.


相關閱讀:
Spring Boot入門(一)初識Spring
Spring Boot入門(二)知識地圖
Spring Boot入門(四)全局異常處理


站點: javashizhan.com/


微信公衆號:

相關文章
相關標籤/搜索