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時,...