首先,在經歷過很多次的面試之后,一直不能很好的敘述關於springbean的生命周期這個概念。今日對於springBean的生命周期進行一個總結。
一、springBean的生命周期:
如下圖所示:
通過這張圖能大致看懂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,調用構造函數來創建實例,第二步是根據配置,進行相應屬性的設置,依賴注入就是在這一步完成的。
第三步和第四步是讓spring去了解咱們的spring容器,第五步和第八步可以針對指定的Bean進行功能增強,這時一般是采用的動態代理,(兩種動態代理方式:jdk動態代理和cglib動態代理)。第六步和第十步是通過實現指定的接口來完成init(初始化)和destory(銷毀)操作。但是我們在通常情況下不會使用這兩步,因為我們可以通過第七步和第十一步,在配置文件中設置相應的初始化和銷毀方法。
比如:
總結:
對於springbean的生命周期,我們需要關注的主要有兩個方法:
1.增強bean的功能可以使用后處理Bean,BeanPostProcessor
2.如果需要初始化或銷毀操作,我們可以使用init-method方法和destory-method方法。
同時還需要注意一點:destory-method方法是只針對於scope=singleton的時候才有效果!