容器中只存在一個共享的Bean,只要id與Bean定義相匹配,那就會是同一個Bean。在容器啓動(實例化)時Bean就實例化和初始化(能夠經過lazy-init="true"來設置使得Bean被調用時才初始化)。web
對有狀態的Bean建議使用Prototype,對無狀態建議使用Singleton。
容器啓動時並無實例化Bean,只有獲取Bean時纔會被建立,而且每一次都是新建一個對象。spring
每一個HTTP 都會有本身的Bean,當處理結束時,Bean銷燬。session
每個Http session有本身的Bean學習
global session做用域相似於標準的HTTP Session做用域,不過僅僅在基於portlet的web應用中才有意義。Portlet規範定義了全局Session的概念,它被全部構成某個portlet web應用的各類不一樣的portlet所共享。在global session做用域中定義的bean被限定於全局portlet Session的生命週期範圍內。spa
Bean在容器啓動時就會實例化和初始化,可是能夠經過Bean的設置來設置對象的初始化時機
第一種:經過設置<bean>.net
<bean id="ServiceImpl" class="cn.csdn.service.ServiceImpl" lazy-init="true"/>
第二種:經過設置<Beans>來修改全部bean默認方式的初始化時機prototype
<beans default-lazy-init="true">
Spring讀取xml文件的時候,並不會馬上建立對象,而是在第一次請求該bean時才初始化(如調用getBean方法時)。容器只會實例化和初始化Bean,不會銷燬Bean。清除prototype做用域的對象並釋聽任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責。在初始化後交由調用者管理code
參考: https://blog.csdn.net/fuzhong...
這篇博客有更加詳細介紹。
ps:本人學識有限,歡迎指出錯誤,相互交流學習。xml