首先,在經歷過不少次的面試以後,一直不能很好的敘述關於springbean的生命週期這個概念。今日對於springBean的生命週期進行一個總結。面試
1、springBean的生命週期:
以下圖所示:spring
經過這張圖能大體看懂spring的生命週期,詳解:函數
- instantiate bean對象實例化
- populate properties 封裝屬性
- 若是Bean實現BeanNameAware執行setBeanName
- 若是Bean實現BeanFactoryAwar或ApplicationContextAwar設置工廠setBeanFactory或上下文對象setApplicationContext
- 若是存在類實現BeanPostProcessor(後處理Bean),執行postProcessBeforeInitialization
- 若是Bean實現InitializingBean執行afterPropertiesSet
- 調用自定義的init-method方法
- 若是存在類實現BeanPostProcessor(處理Bean),執行postProcessAfterInitialization
- 執行業務處理
- 若是Bean實現DisposableBean執行destroy
- 調用自定義的destroy-method
第一步就是對實例化bean,調用構造函數來建立實例,第二步是根據配置,進行相應屬性的設置,依賴注入就是在這一步完成的。post
第三步和第四步是讓spring去了解我們的spring容器,第五步和第八步能夠針對指定的Bean進行功能加強,這時通常是採用的動態代理,(兩種動態代理方式:jdk動態代理和cglib動態代理)。第六步和第十步是經過實現指定的接口來完成init(初始化)和destory(銷燬)操做。可是咱們在一般狀況下不會使用這兩步,由於咱們能夠經過第七步和第十一步,在配置文件中設置相應的初始化和銷燬方法。spa
好比:代理
總結:對象
對於springbean的生命週期,咱們須要關注的主要有兩個方法:blog
1.加強bean的功能可使用後處理Bean,BeanPostProcessor接口
2.若是須要初始化或銷燬操做,咱們可使用init-method方法和destory-method方法。生命週期
同時還須要注意一點:destory-method方法是隻針對於scope=singleton的時候纔有效果!