Spring知識——bean的生命周期

  • 2020 年 1 月 16 日
  • 筆記

PS:網上雖然有很多例子,但是自己通過單步調試,重新理了一遍Spring的生命周期。

Spring Bean生命周期

入口:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean

  1. 調用構造方法Constructor(反射調用)
  2. 調用InstantiationAwareBeanPostProcessor#postProcessPropertyValues 擴展介面(該介面可以用於對屬性值進行一些處理) 例如如下屬性:

Snip20181002_1.png

3.org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

  • 觸發@Autowired/@Value/@Inject 依賴注入
  • 觸發@Resouce的依賴注入
  1. BeanNameAware#setBeanName 讓Bean獲取自己在BeanFactory配置中的名字(org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition))
  2. BeanFactoryAware#setBeanFactory(如果bean實現了BeanFactoryAware介面,則調用該bean的setBeanFactory方法,使得bean可以獲取beanFactory)
  3. ApplicationContextAware#setApplicationContext(理由同上,只是獲取的是applicationContext)
  4. BeanPostProcessor#postProcessBeforeInitialization
  5. @PostConstruct 注釋用於在依賴關係注入完成之後需要執行的方法上(通過調用beanPostProcessor調用)
  6. InitializingBean#afterPropertiesSet
  7. 自定義init-method(通過在bean標籤的init-method方法定義)
  8. BeanPostProcessor#postProcessAfterInitialization

Bean is Ok … Container shutdown(當容器關閉了,依次調用如下方法)

  1. @PreDestroy
  2. DisposableBean#destroy
  3. destory-method