Spring IOC容器启动流程浅析
2022-03-12 18:29:58 9 举报
登录查看完整内容
Spring IOC容器启动流程浅析
作者其他创作
大纲/内容
registerBeanPostProcessors(beanFactory)
模板方法
这里只会注册接口方式的监听器
1、注册@Configuration注解处理器:ConfigurationClassPostProcessor2、注册@Autowired注解处理器:AutowiredAnnotationBeanPostProcessor3、注册@PreDestroy和@PostConstruct注解处理器:CommonAnnotationBeanPostProcessor4、注册@EventListener注解处理器:EventListenerMethodProcessor
重要说明:1、后置处理器ApplicationContextAwareProcessor在这注册2、后置处理器ApplicationListenerDetector在这注册
1、清除上下文资源缓存
clearResourceCaches()
注册监听器,绑定到广播器中,并且广播是早期的事件
1、this()
3、发布容器刷新的事件
initApplicationEventMulticaster()
实例化所有剩余的(非懒加载)单例Bean
获取beanFactory
注解方式启动
new AnnotationConfigApplicationContext(RootConfig.class)
容器刷新前的准备,设置上下文状态,获取属性,验证必要的属性等
obtainFreshBeanFactory()
prepareBeanFactory(beanFactory)
onRefresh()
注册了一些后置处理器
1、从容器中获取BeanDefinitionRegistryPostProcessor,如果其是PriorityOrdered类型,那么实例化并执行其postProcessBeanDefinitionRegistry方法2、从容器中获取BeanDefinitionRegistryPostProcessor,如果其是Ordered类型,那么实例化并执行其postProcessBeanDefinitionRegistry方法3、实例化并执行上面两个排序接口都没有实现的BeanDefinitionRegistryPostProcessor,调用其postProcessBeanDefinitionRegistry方法
3、refresh()
实例化并调用所有注册的bean后置处理器
实例化国际化工具类MessageSource
实例化并调用所有注册的beanFactory后置处理器
new AnnotatedBeanDefinitionReader(this)
2、初始化所有的LifecycleProcessor,并调用他们的onRefresh方法
1、获取容器中所有的BeanFactoryPostProcessor,但是忽略其是BeanDefinitionRegistryPostProcessor2、实例化并执行实现PriorityOrdered接口的BeanFactoryPostProcessor2、实例化并执行实现Ordered接口的BeanFactoryPostProcessor3、实例化并执行上面两个排序接口都没有实现的BeanFactoryPostProcessor
注册配置类的BeanDefinition到容器中
2、register(annotatedClasses)
registerListeners()
系统默认的事件广播器SimpleApplicationEventMulticaster
在web环境中后置处理器ServletContextAwareProcessor在这注册
配置beanFactory的标准上下文特征
initMessageSource()
postProcessBeanFactory(beanFactory)
实例化事件广播器ApplicationEventMulticaster
publishEvent(new ContextRefreshedEvent(this))
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry)
finishBeanFactoryInitialization(beanFactory)
prepareRefresh()
1、实例化PriorityOrdered接口的BeanPostProcessor,并注册其到beanPostProcessors池中2、实例化Ordered接口的BeanPostProcessor,并注册其到beanPostProcessors池中3、实例化剩余的BeanPostProcessor,并注册其到beanPostProcessors池中
finishRefresh()
系统默认的消息源DelegatingMessageSource
invokeBeanFactoryPostProcessors(beanFactory)
initLifecycleProcessor();getLifecycleProcessor().onRefresh();
0 条评论
回复 删除
下一页