史上最全講解 IOC

2021-10-02 14:48:24 字數 3131 閱讀 9316

spring ioc自動注入

spring ioc掃瞄器

bean的作用域

bean的生命週期

通俗易懂的理解ioc

由於引進了中間位置的「第三方」,也就是ioc容器,使得a、b、c、d這4個物件沒有了耦合關係,齒輪之間的傳動全部依靠「第三方」了,全部物件的控制權全部上繳給「第三方」ioc容器,所以,ioc容器成了整個系統的關鍵核心,它起到了一種類似「粘合劑」的作用,把系統中的所有物件粘合在一起發揮作用,如果沒有這個「粘合劑」,物件與物件之間會彼此失去聯絡,這就是有人把ioc容器比喻成「粘合劑」的由來。

軟體系統在沒有引入ioc容器之前,如圖1所示,物件a依賴於物件b,那麼物件a在初始化或者執行到某一點的時候,自己必須主動去建立物件b或者使用已經建立的物件b。無論是建立還是使用物件b,控制權都在自己手上。

軟體系統在引入ioc容器之後,這種情形就完全改變了,如圖3所示,由於ioc容器的加入,物件a與物件b之間失去了直接聯絡,所以,當物件a執行到需要物件b的時候,ioc容器會主動建立乙個物件b注入到物件a需要的地方。

通過前後的對比,我們不難看出來:物件a獲得依賴物件b的過程,由主動行為變為了被動行為,控制權顛倒過來了,這就是「控制反轉」這個名稱的由來

依賴注入 di(dependency injection)是實現ioc的方法。所謂依賴注入,就是由ioc容器在執行期間,動態地將某種依賴關係注入到物件之中

ioc注入和bean例項化的關係或者區別:注入給類中某乙個屬性賦值,這個屬性可能是某個型別的物件.bean例項化是將某一層比如service層裡面的某乙個類new成物件,不直接使用new而是靠ioc容器,如果當前要建立的物件中沒有需要建立其他物件(沒有依賴),那麼就不需要注入.

1、屬性字段提供set方法

2、配置檔案的bean標籤設定property標籤

1、屬性字段提供帶參構造器

2、配置檔案的bean標籤設定constructor-arg

注意:如果多個bean物件中互相注入,則會出現迴圈依賴的問題

可以通過set方法注入解決

1、定義工廠類

2、在配置檔案中設定bean標籤,指定工廠物件並設定對應的方法

1、定義工廠類

2、宣告工廠bean標籤,宣告bean物件,指明工廠物件和工廠方法

自動化注入省略xml中的properties

掃瞄器省略xml中的beans

1、準備環境(修改配置檔案)

2、開啟自動化注入

<

context:annotation-config

/>

3、給注入的bean物件新增註解

@resource註解實現自動注入(反射)

1、預設根據屬性欄位名稱查詢對應的bean物件 (屬性欄位的名稱與bean標籤的id屬性值相等)

2、如果屬性欄位名稱未找到,則會通過型別(class型別)查詢

3、屬性可以提供set方法,也可以不提供set方法

4、註解可以宣告在屬性級別 或 set方法級別

5、@resource可以設定name屬性,name屬性值必須與bean的id屬性值一致;如果設定了name屬性值,就只會按照name屬性值查詢bean物件

6、當注入介面時,如果介面只有乙個實現則正常例項化;如果介面存在多個實現,則需要使用name屬性指定需要被例項化的bean物件

@autowired註解實現自動化注入:

1、預設通過型別(class型別)查詢bean物件 與屬性欄位的名稱無關

2、屬性可以提供set方法,也可以不提供set方法

3、註解可以宣告在屬性級別 或 set方法級別

4、可以新增@qualifier結合使用,通過value屬性值查詢beam物件(value屬性值必須要設定,且值要與bwan標籤的id屬性值對應)

1xml檔案中設定自動化掃瞄的範圍

2.使用特定的註解

controller層:@controller

service層:@service

dao層:@repository

其他層:@component

1.singleton單例作用域

spring ioc容器在例項化物件時,會將單例物件設定到單例快取池中

2.prototype原型作用域

spring ioc容器在例項化物件時,不會將單例物件設定到單例快取池中,每一次例項都是乙個新的物件

3.web作用域

request作用域:在每一次請求例項化乙個bean物件

session作用域:在每一次有效會話例項化乙個bean物件

globalsession作用域:類似於session

1 lazy-init設定為false有什麼好處?

好處一:可以提前發現潛在的配置問題

好處二:bean 物件存在於快取中,使用時不用再去例項化bean,加快程式執行效率

2.什麼物件適合作為單例物件?

無狀態的物件 (不存在會改變物件狀態的成員變數)

controller層、service層、dao層

bean的生命週期

bean的生命週期包括bean的定義、初始化、使用和銷毀4個階段

定義:通過配置文件的方式來定義bean的

初始化

預設在ioc容器載入時,就例項化物件

spring bean 初始化有兩種方式:

i.在配置文件中通過指定 init-method 屬性來完成。

ii.實現org.springframework.beans.factory.initializingbean介面。

使用

史上最全面的spring講解(一)

如果僅使用了支援servlet2.4以前規範的web容器,則該容器不支援listener規範,故無法使用這種配置,可以使用filter配置方式,我們可以在web應用的web.xml增加如下filter配置 requestcontextfilter org.springframework.web.fi...

史上最全講解 oracle資料庫 續

主外來鍵關係 主表 父表 從表 子表 從表中的外來鍵關聯主表中的主鍵字段 當兩張表存在主從表關係,刪除表的時候,需要注意 預設先刪除從表,再刪除主表 cascade constraints 刪除主表的同時級聯刪除主從表之間約束關係 當兩張表存在主從表關係,刪除資料的時候,需要注意 刪除主表中沒有被從...

史上最全scss教程

1.資料型別 sassscript 支援 6 種主要的資料型別 將帶引號的字串轉化為無引號字串 mixin b selector includeb header 2.變數 通常在專案中會建立variable.scss用來儲存一些全域性變數 普通變數 g primary 409eff 解構 value...