Spring知識——bean的生命周期
- 2020 年 1 月 16 日
- 筆記
PS:網上雖然有很多例子,但是自己通過單步調試,重新理了一遍Spring的生命周期。
Spring Bean生命周期
入口:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
- 調用構造方法Constructor(反射調用)
- 調用InstantiationAwareBeanPostProcessor#postProcessPropertyValues 擴展介面(該介面可以用於對屬性值進行一些處理) 例如如下屬性:
Snip20181002_1.png
3.org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
- 觸發@Autowired/@Value/@Inject 依賴注入
- 觸發@Resouce的依賴注入
- BeanNameAware#setBeanName 讓Bean獲取自己在BeanFactory配置中的名字(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition))
- BeanFactoryAware#setBeanFactory(如果bean實現了BeanFactoryAware介面,則調用該bean的setBeanFactory方法,使得bean可以獲取beanFactory)
- ApplicationContextAware#setApplicationContext(理由同上,只是獲取的是applicationContext)
- BeanPostProcessor#postProcessBeforeInitialization
- @PostConstruct 注釋用於在依賴關係注入完成之後需要執行的方法上(通過調用beanPostProcessor調用)
- InitializingBean#afterPropertiesSet
- 自定義init-method(通過在bean標籤的init-method方法定義)
- BeanPostProcessor#postProcessAfterInitialization
Bean is Ok … Container shutdown(當容器關閉了,依次調用如下方法)
- @PreDestroy
- DisposableBean#destroy
- destory-method