首先我們應該知道,不管是spring還是springboot其實在底層也都實現了servlet介面。
因而在了解spring中bean的生命週期之前,我們先來了解一下servlet的生命週期,然後按照這個流程去追尋bean的生命週期。
servlet
生命週期:
1、例項化 在第一次訪問servlet的時候建立servlet物件,只呼叫一次。證明servlet物件在tomcat中是單例。
2、初始化init()方法 建立完servlet物件的時候呼叫,只呼叫1次。
3、服務service()方法 每次發出請求是呼叫。呼叫n次
4、銷毀 destroy()方法 銷毀servlet物件的時候呼叫,停止伺服器或者重新部署web應用時銷毀servlet物件。只呼叫一次。
spring
中bean的生命週期
1、例項化乙個bean--也就是我們常說的new;
2、按照spring上下文對例項化的bean進行配置--也就是ioc注入;
3、如果這個bean已經實現了beannameaware介面,會呼叫它實現的setbeanname(string)方法,此處傳遞的就是spring配置檔案中bean的id值
4、如果這個bean已經實現了beanfactoryaware介面,會呼叫它實現的setbeanfactory(setbeanfactory(beanfactory)傳遞的是spring工廠自身(可以用這個方式來獲取其它bean,只需在spring配置檔案中配置乙個普通的bean就可以)
5、如果這個
bean
已經實現了
介面,會呼叫
方法,傳入
spring
上下文(同樣這個方式也可以實現步驟
4的內容,但比
4更好,因為
是beanfactory
的子介面,有更多的實現方法); 6
、如果這個
bean
實現了beanpostprocessor
介面,將會呼叫postprocessbeforeinitialization(object obj, string s)
方法,beanpostprocessor
經常被用作是
bean
內容的更改,並且由於這個是在
bean
初始化結束時呼叫那個的方法,也可以被應用於記憶體或快取技術;
7、如果bean在spring配置檔案中配置了init-method屬性會自動呼叫其配置的初始化方法。
8、如果這個bean關聯了beanpostprocessor介面,將會呼叫postprocessafterinitialization(object obj, string s)方法、;
9、當bean不再需要時,會經過清理階段,如果bean實現了disposablebean這個介面,會呼叫那個其實現的destroy()方法;
10、最後,如果這個bean的spring配置中配置了destroy-method屬性,會自動呼叫其配置的銷毀方法。
以上10
步驟可以作為面試或者筆試的模板,另外我們這裡描述的是應用
spring
上下文bean
的生命週期,如果應用
spring
的工廠也就是
beanfactory
的話去掉第5步
就ok了。
Spring框架中的Bean物件的生命週期
從書上可知,spring框架中bean物件有它的生命週期,還包括bean的銷毀。在beanfacotory中獲取的例項是singleton,beanfactory預設每乙個引用來維護乙個例項,對單執行程式來講,並不會有什麼問題,但是多程式來說,就需要你注意執行的安全,可以設定每次在beanfacot...
Spring中Bean的作用域 狀態 生命週期
spring 3中為bean定義了5中作用域,分別為singleton 單例 prototype 原型 request session和global session,5種作用域說明如下 singleton 單例模式,spring ioc容器中只會存在乙個共享的bean例項,無論有多少個bean引用它...
Spring學習筆記 關於bean的生命週期
springioc容器可以管理bean的生命週期,spring允許在bean宣告週期的特定點執行定製的任務。springioc容器對bean的生命週期進行管理的過程 在bean的宣告裡設定init method和destory method屬性,為bean指定初始化和銷毀的方法。bean後置處理器允...