5.Spring Bean生命週期.md
阿新 • • 發佈:2018-11-08
文章目錄
5.Spring Bean生命週期
生命週期流程圖
說明
- *呼叫InstantitationAwareBeanPostProcessor的postProcessBeforeInstantitation()方法
- 例項化:Class clazz, custructor或者 newInstance
- *呼叫用InstantitaonAwareBeanPostProcessor的postProcessAfterInstantitation()方法
- *呼叫InstantitaionAwareBeanPostProcessor的postProcesPropertyValues()方法
- 設定屬性: 如果在配置中賦值了,則呼叫setXxx
- 呼叫BeanAware的setBeanName(String name), 把當前bean name 注入進來
- 呼叫BeanFactoryAware的setBeanFacotry(BeanFactory factory),吧factory注入進來
. 呼叫ApplicationContextAware的setApplicationContent() ,把ApplicationContext注入進來 - *呼叫BeanPostProcessor的postporcessBeforeInitialization(Object o, String s)把 bean傳進來,供元件處理bean的屬性等, s為bean的name,o為bean的例項
- 呼叫InitializatingBean的afterPropertiesSet()方法
- 呼叫自定義初始方法,即init-method
- *呼叫BeanPostProcessor的postProcessAfterInitialization(Object o, String s)方法
- bean可以用了
- 容器關閉
- 呼叫DisposableBean的destroy()方法
- 呼叫自動以的銷燬方法,即destroy-method.
總結
- 生命週期呼叫方法,大概分為4類:
- Bean自身的方法
- 建構函式例項化bean,setter熟悉,init-method,destory-method
- Bean級生命週期介面
- BeanNameAware,BeanFactoryAware,InitializingBean和DisposableBean,這些介面的方法由bean類直接實現
- 容器級生命週期介面方法
- 帶*的有InstantiationAwareBeanPostProcessor和BeanPostProcessor這兩個介面實現,一般不由bean本身實現,他們獨立於bean,對所有bean其作用,可以針對具體某一bean處理
- 工廠後處理方法
- Bean自身的方法
- bean級的生命週期介面和容器級生命週期介面是個性和共性辯證統一思想的體現。前者解決bean個性化處理問題,後者解決容器中某些bean共性化處理的問題