Spring中關於Bean的生命週期相關的內容

2021-09-19 11:21:24 字數 3167 閱讀 1279

因為我們需要依據bean註冊到容器的不同時間點進行攔截或其它一系列操作,使得程式設計師對控制反轉這一過程具有更好的控制力和介入能力。

例項化物件在容器中的生命週期如下:

上圖中,的四個方法,分別在bean的不同生命週期內執行,其中紅色的兩個節點分別在bean的初始化後和銷毀前執行,一共有三種實現方式:

定義乙個類名稱為yuanqishaonv:

public class yuanqishaonv 

public void init()

public void destroy()

}

配置類如下:

@configuration//告訴spring容器,這個類是乙個配置類需要在執行是被載入

public class config2

}

可以看出來,我們在@bean標籤中通過init-method和destroy-method指定了初始化和銷毀方法。

測試類如下:

@test

public void test01()

}

可以從測試類看出,我們先獲取了容器中的所用bean物件的名稱並將其列印出來,最後關閉容器(不關閉容器destroy-method無法執行)

這裡要說明一點,容器中的物件必須是單例的,因為只有單例的容器才會從頭到尾管理你的生命週期(管生還管養,管殺還管埋),但是如果你是prototype(多例) ,那麼容器將只會管理你的建立,而不管理你建立後的其它生命週期。也就是說多例模式無法看到destroy-method的效果。

執行結果如下:

實現類如下yaag(young and active girl):

@component

public class yaag implements initializingbean, disposablebean

public void afterpropertiesset() throws exception

}

配置類如下:

@configuration//告訴spring容器,這個類是乙個配置類需要在執行是被載入

@componentscan("com.sdp.entity")

public class config2

測試類如下:

@test

public void test01()

}

測試結果如下:

建立類yuanqishaonv:

public class yuanqishaonv 

@postconstruct

public void init()

@predestroy

public void destroy()

}

配置檔案如下:

@configuration//告訴spring容器,這個類是乙個配置類需要在執行是被載入

@import(value=yuanqishaonv.class)

public class config2

測試類如下:

@test

public void test01()

}

測試結果如下:

下來我們在來說一下綠色圈圈住的兩個方法

這兩個方法是beanpostprocessor介面中的,該接樂意被稱為bean後處理器,功能非常強大,一旦你在當前容器中注入的該介面的實現類,容器中的所有bean物件都會執行該介面中的兩個方法(一般情況下,特殊情況除外)。

下面我們來測試一下這個方法:

定義測試類yuanqishaonv:

public class yuanqishaonv 

@postconstruct

public void init()

@predestroy

public void destroy()

}

配置類如下:

@configuration//告訴spring容器,這個類是乙個配置類需要在執行是被載入

@import(value=)

public class config2

測試類如下:

@test

public void test01()

}

測試結果如下:

我們可以看出來,在容器中註冊每乙個bean的時候都會執行beanpostprocessor中的方法

postprocessbeforeinitialization()
和方法

postprocessafterinitialization()
還有要說的就是:beanpostprocessor是乙個非常重要的介面,在我們的spring註解式開發中,很多地方的底層實現都使用了bean後處理器,比如

@autowired自動注入標籤底層使用了bean後處理器。

@postconstruct和@predestroy初始化和銷毀註解也使用了bean後處理器。

等等,所以深入理解bean後處理器是很有助於我們深入理解spring原始碼的。

關於spring 的bean 裝配

foo foo foo foo1111 2222 42 www.cl.com www.cl1.com 1.單例項 預設 與原型bean singleton 為true 單例項模式,通過getbean或者裝配只能得到同一例項singleton 為false 原型模式,請求bean返回不同例項 2.例項...

Java面試之Spring的bean的生命週期

一 bean的定義 spring通常通過配置檔案定義bean。如 xmlns xsi xsi schemalocation spring beans 2.0.xsd helloworld 這個配置檔案就定義了乙個標識為 helloworld 的bean。在乙個配置文件中可以定義多個bean。二 be...

關於spring的bean配置繼承

bean配置繼承?顧名思義,是bean配置檔案的繼承,不是類的繼承,如下 乙個普通的bean package com.panguso.phl.bean public class user public void setname string name public long getid public...