Spring中Bean的初始化及銷毀方式

2021-09-02 23:33:53 字數 3960 閱讀 6141

spring中的bean是由ioc容器來管理,這些bean在同乙個容器中是單例模式的,也就是說為無狀態的。

這個單例不同於自己寫的單例模式:

自己寫的單例,從載入來說是通過classloader載入並生成單例;

spring中的單例,僅僅是在這乙個spring容器中為單例。

無狀態:不管哪段**執行、不管有多少併發執行,這個bean都是一樣的。

有狀態:程式執行到不同地方、不同執行緒執行時,這個bean都有變化。

由ioc容器來管理程式中的bean,能有效提高程式的執行效率,不需要在程式中頻繁new物件,提高了物件的復用性。

1、可以在每次需要這個多例bean的時候,手動new;

2、spring中其實有多例的配置及使用

bean的兩個初始化方式

"singleton"

class

="com.demo00.spring.bean.init.demo"

scope

="singleton"

/>

"prototype"

class

="com.demo00.spring.bean.init.demo"

scope

="prototype"

/>

@bean

(name =

)@scope

("prototype"

)//這個如果不寫,為單例

private demo gettestbean()

以xml形式來初始化bean為例,

如果初始化時,想要自定義這個bean的一些屬性,有兩種方式:

自定義初始化方法

"initbean"

class

="com.demo00.spring.bean.init.demo"

init-method

="init"

>

name

="message"

value

="為demo物件中的屬性message賦值"

/>

bean

>

public

class

demo

public

void

setmessage

(string message)

public

void

init()

}

注意:

載入順序:

通過實現介面initializingbean並重寫afterpropertiesset()

"initbean"

class

="com.demo00.spring.bean.init.demo2"

>

name

="message"

value

="為demo2物件中的屬性message賦值"

/>

bean

>

import org.springframework.beans.factory.initializingbean;

public

class

demo2

implements

initializingbean

public

void

setmessage

(string message)

@override

public

void

afterpropertiesset()

}

載入順序:

如果在xml中配置了bean屬性的初始值,也配置了初始化的方法名,在**中也實現並重寫了afterpropertiesset()方法,那最後賦值的是哪個?

"initbean"

class

="com.demo00.spring.bean.init.demo2"

init-method

="init"

>

name

="message"

value

="為demo2物件中的屬性message賦值"

/>

bean

>

import org.springframework.beans.factory.initializingbean;

public

class

demo2

implements

initializingbean

public

void

setmessage

(string message)

@override

public

void

afterpropertiesset()

public

void

init()

}

載入順序:

也有兩種方式

xml配置

"initbean"

class

="com.demo00.spring.bean.init.demo"

init-method

="init"

destroy-method

="cleanup"

>

name

="message"

value

="為demo物件中的屬性message賦值"

/>

bean

>

public

class

demo

public

void

setmessage

(string message)

public

void

init()

public

void

cleanup()

}

通過實現介面disposablebean

"initbean"

class

="com.demo00.spring.bean.init.demo2"

>

name

="message"

value

="為demo2物件中的屬性message賦值"

Spring中Bean的初始化流程

spring中經典的9種設計模式 mybatis執行流程 通常乙個 xml 對映檔案,都會寫乙個 dao 介面與之對應,請問,這個 dao 介面的工作原理是什麼?dao 介面裡的方法,引數不同時,方法能過載嗎?id是否可以相同 spring bean 的初始化主要實現在bean.factory包下的...

Spring初始化Bean方法

一 總結 1 spring為bean初始化提供了兩種方式 2 實現initializingbean介面是直接呼叫afterpropertiesset方法,比通過反射呼叫init method指定的方法效率相對來說要高點。但是init method方式消除了對spring的依賴 3 如果呼叫after...

Spring初始化Bean狀態

一 單例模式 在spring中其實是scope 作用範圍 引數的預設設定值 每個bean定義只生成乙個物件例項,每次getbean請求獲得的都是此例項 單例模式分為餓漢模式和懶漢模式 關於單例的餓漢,懶漢請參考 二 預設情況下為單例模式 餓漢 prototype多例項模式介紹 呼叫getbean時,...