默認情況下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來區分的。