配置在Spring中的Bean在Spring容器中從加載到銷毀會經歷那些過程呢?如果實現一些特定的Spring接口,這些特定接口的方法會在什么時候被調用呢?本文簡單介紹一下這些過程.
Bean在Spring容器中的生命周期如下圖所示:
1,調用Bean的構造函數(或者工廠方法)實例化Bean.
2,對Bean的成員變量賦值.
3,如果Bean實現了BeanNameAware,調用Bean的setBeanName方法.
4,如果Bean實現了BeanFactoryAware,調用Bean的setBeanFactory方法.
5,如果Bean實現了ApplicationContextAware,調用Bean的setApplicationContext方法.
6,如果容器中配置了BeanPostProcessor,調用BeanPostProcessor的postProcessBeforeInitialization方法(如果有多個BeanPostProcessor,調用每一個BeanPostProcessor的postProcessBeforeInitialization方法).
6,如果Bean實現了InitializingBean,調用Bean的afterPropertiesSet方法.
7,如果Bean配置了init-method方法,調用init-method配置的Bean方法.
8,如果容器中配置了BeanPostProcessor,調用BeanPostProcessor的postProcessAfterInitialization方法.(如果有多個BeanPostProcessor,調用每一個BeanPostProcessor的postProcessAfterInitialization方法).
9,Bean處於可以使用的狀態.
10,Spring容器關閉.
11,4,如果Bean實現了DisposableBean,調用Bean的destroy方法.
12,如果Bean配置了destroy-method方法,調用destroy-method配置的Bean的方法.
SpringMVC的生命周期,即SpringMVC的執行流程:
第一步:發起請求到前端控制器(DispatcherServlet)
第二步:前端控制器請求HandlerMapping(處理器映射器)查找 Handler
可以根據xml配置、注解進行查找
第三步:處理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器調用處理器適配器去執行Handler
第五步:處理器適配器去執行Handler
第六步:Handler執行完成給適配器返回ModelAndView
第七步:處理器適配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一個底層對象,包括 Model和view
第八步:前端控制器請求視圖解析器去進行視圖解析
根據邏輯視圖名解析成真正的視圖(jsp)
第九步:視圖解析器向前端控制器返回View
第十步:前端控制器進行視圖渲染
視圖渲染將模型數據(在ModelAndView對象中)填充到request域
第十一步:前端控制器向用戶響應結果