org.springframework.context.support.AbstractApplicationContext.refresh()
synchronized (this.startupShutdownMonitor) {
...
1. 容器刷新前的準(zhǔn)備 prepareRefresh
2. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()
創(chuàng)建DefaultListableBeanFactory募舟,若已有beanFacotry則先摧毀再創(chuàng)建;解析bean定義并放入beanFactory;
3. prepareBeanFactory(beanFactory)
設(shè)置beanFactory具被,加入一些BeanPostprocessor和其他組件對(duì)象纬纪。
4. postProcessBeanFactory(beanFactory)
可以添加一些BeanFactoryPostProcessor等
5. invokeBeanFactoryPostProcessors(beanFactory)
調(diào)用 BeanFactoryPostProcessor
BeanFactoryPostProcessor#postProcessBeanFactory(ConfigurableListableBeanFactory)
BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry(BeanDefinitionRegistry)
6. registerBeanPostProcessors(beanFactory)
注冊(cè) BeanPostProcessor
BeanPostProcessor#postProcessBeforeInitialization(Object bean, String beanName)
BeanPostProcessor#postProcessAfterInitialization(Object bean, String beanName)
InstantiationAwareBeanPostProcessor...
*****************************not important***************************************
7. initMessageSource()
國(guó)際化蚓再,registerSingleton(DelegatingMessageSource)
8. initApplicationEventMulticaster()
事件廣播器,registerSingleton(SimpleApplicationEventMulticaster)
9. onRefresh()
10. registerListeners()
注冊(cè)事件監(jiān)聽(tīng)器
*****************************not important***************************************
11. finishBeanFactoryInitialization(beanFactory)
初始化singleton beans
12. finishRefresh()
清除resourceCache包各,registerSingleton(DefaultLifecycleProcessor)摘仅,
廣播容器刷新事件(ContextRefreshedEvent)
...
}
一、prepareRefresh(容器刷新前的準(zhǔn)備 )
//容器刷新前问畅,設(shè)置一些值
this.startupDate = System.currentTimeMillis();
this.closed.set(false);
this.active.set(true);
// Initialize any placeholder property sources in the context environment
initPropertySources();
//獲取StandardEnvironment環(huán)境娃属,執(zhí)行一些校驗(yàn)
getEnvironment().validateRequiredProperties();
//Allow for the collection of early ApplicationEvents,to be published once the multicaster is available...
this.earlyApplicationEvents = new LinkedHashSet<>();
二、獲取BeanFactory
使用xml配置的較老的容器护姆,在這一步會(huì)加載beanDefinition矾端。
三、prepareBeanFactory(放入一些組件到BeanFactory)
四卵皂、postProcessBeanFactory
模板方法须床,子類可以做一些拓展實(shí)現(xiàn)。
五渐裂、invokeBeanFactoryPostProcessors
初始化 BeanFactoryPostProcessor 并調(diào)用其方法豺旬。
//BeanFactoryPostProcessor
void postProcessBeanFactory(ConfigurableListableBeanFactory)
//BeanDefinitionRegistryPostProcessor
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry)
重要的處理類
org.springframework.context.annotation.ConfigurationClassPostProcessor
負(fù)責(zé)加載BeanDefinition钠惩。
六、registerBeanPostProcessors
初始化 BeanPostProcessor 并添加到BeanFactory中族阅。
//BeanPostProcessor
Object postProcessBeforeInitialization(Object bean, String beanName)
Object postProcessAfterInitialization(Object bean, String beanName)
PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)
//InstantiationAwareBeanPostProcessor
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
boolean postProcessAfterInstantiation(Object bean, String beanName)
//MergedBeanDefinitionPostProcessor
void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)
重要的處理類
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
七篓跛、initMessageSource
注入單實(shí)例 org.springframework.context.support.DelegatingMessageSource
實(shí)現(xiàn)國(guó)際化功能。
八坦刀、initApplicationEventMulticaster
注入單實(shí)例 org.springframework.context.event.SimpleApplicationEventMulticaster.SimpleApplicationEventMulticaster(BeanFactory)
實(shí)現(xiàn)事件傳播功能
九愧沟、onRefresh
模板方法,子類可以做一些拓展實(shí)現(xiàn)鲤遥。
十沐寺、registerListeners
注冊(cè)監(jiān)聽(tīng)器,
十一盖奈、finishBeanFactoryInitialization?
實(shí)例化所有的 non-lazy-init
的BeanDefinition混坞,容器刷新中最核心的方法。
詳細(xì)內(nèi)容
十二钢坦、finishRefresh
清空一些緩存資源究孕、執(zhí)行一些LifecycleProcessor、發(fā)布一些事件等