Spring單例模式和多例模式

默認情況下scope="singleton",那麼該Bean是單例,任何人獲取該Bean實例的都爲同一個實例;
scope="prototype",任何一個實例都是新的實例;
scope="request",在WEB應用程序中,每一個實例的作用域都爲request範圍;

scope="session",在WEB應用程序中,每一個實例的作用域都爲session範圍;

注意:在默認情況下,Bean實例在被Spring容器初始化的時候,就會被實例化,默認調用無參數的構造方法。在其它情況下,Bean將會在獲取實例的時候纔會被實例化。

在Spring中,bean可以被定義爲兩種模式:prototype(多例)和singleton(單例)

singleton(單例):只有一個共享的實例存在,所有對這個bean的請求都會返回這個唯一的實例。

 

單例模式分爲餓漢模式和懶漢模式:

餓漢模式 spring singleton的缺省是餓漢模式:啓動容器時(即實例化容器時),爲所有spring配置文件中定義的bean都生成一個實例
懶漢模式 在第一個請求時才生成一個實例,以後的請求都調用這個實例
spring singleton設置爲懶漢模式:<beans default-lazy-init="true">

prototype(多例):對這個bean的每次請求都會創建一個新的bean實例,類似於new。

Spring中說的單例是相對於容器的,既在ApplicationContext中是單例的。而平常說的單例是相對於JVM的。另一個JVM可以有多個Spring容器,而且Spring中的單例也只是按bean的id來區分的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章