1.spring類加載
AbstractApplicationContext.finishBeanFactoryInitialization(...);
beanFactory.preInstantiateSingletons();
DefaultListableBeanFactory.getBean(beanName);
AbstractBeanFactory.doGetBean();
AbstractAutowireCapableBeanFactory.createBean(....)
populateBean(beanName, mbd, instanceWrapper);
initializeBean(...)
//調用BeanPostProcessor.postProcessBeforeInitialization()方法
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
//調用BeanPostProcessor.postProcessBeforeInitialization()方法
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
2.BeanPostProcessor有個實現類CommonAnnotationBeanPostProcessor,專門處理@PostConstruct @PreDestroy註解。
CommonAnnotationBeanPostProcessor的父類InitDestroyAnnotationBeanPostProcessor()
InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization()
InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata()
// 組裝生命週期元數據
InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata()
// 查找@PostConstruct註釋的方法
InitDestroyAnnotationBeanPostProcessor.initAnnotationType
// 查找@PreDestroy註釋方法
InitDestroyAnnotationBeanPostProcessor.destroyAnnotationType
// 反射調用
metadata.invokeInitMethods(bean, beanName);