Spring IOC非常详细流程图
2022-04-15 19:50:52 0 举报
Spring IOC非常详细流程图
作者其他创作
大纲/内容
完成了容器上下文的刷新工作后:1.清除资源缓存.2.注册容器生命周期处理器并回调LifecycleProcessor's onRefresh().3.发布ContextRefreshedEvent.4.如果激活了JSM,那么提供JMS的支持.
initApplicationEventMulticaster
链接:Spring#IOC#refresh#obtainFreshBeanFactory源码
org.springframework.context.annotation.AnnotatedBeanDefinitionReader#register
prepareBeanFactory
GenericApplicationContext context = new GenericApplicationContext(); BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry)context.getBeanFactory(); PropertiesBeanDefinitionReader propertiesBeanDefinitionReader = new PropertiesBeanDefinitionReader(beanDefinitionRegistry); // 设置ResourceLoader为GenericApplicationContext propertiesBeanDefinitionReader.setResourceLoader(context); propertiesBeanDefinitionReader.loadBeanDefinitions(\"property_parse_demo.property\");
onRefresh
finishBeanFactoryInitialization
BeanDefinitionReader是解析BeanDefinition的执行者BeadDefinitionReader使用ResourceLoader进行资源定位GenericBeanDefinition为真正装载BeanDefinition属性的类完成BeanDefinition的装载后,BeanDefinitionReader会对该BeanDefinition进行注册完成注册后,Spring会发送注册完成通知事件
org.springframework.beans.factory.support.DefaultListableBeanFactory#registerBeanDefinition
ApplicationContext ctx = new AnnotationConfigApplicationContext(QuickstartConfiguration.class);
registerListeners
AbstractBeanDefinitionReader
startupShutdownMonitor是一个同步锁,防止容器在refresh或者destroy的时候发生并发冲突.
prepareRefresh
loadBeanDefinitions
XmlBeanDefinitionReader
registerBeanPostProcessors
BeanDefinitionReader
ClassPathResource resource = new ClassPathResource(\"container/listable-container.xml\");DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
重置Spring core的缓存区域.也许再也不需要单例bean的元数据了.
初始化国际化配置。如果没有定义,则使用默认的.
postProcessBeanFactory
resetCommonCaches
DefaultListableBeanFactory#resetBeanDefinition
Spring#IOC#AbstractApplicationContext#refresh
processBeanDefinition
org.springframework.context.support.AbstractApplicationContext#refresh.
obtainFreshBeanFactory
PropertiesBeanDefinitionReader
注册bean级别的postProcessor.在之后Bean的实例化过程中,会去执行这些BeanPostProcessor的方法.
AnnotatedBeanDefinitionReader
初始化ApplicationEventMulticaster.其中SimpleApplicationEventMulticaster为Spring的默认事件发布器,可以通过配置线程池与开启异步调用的方式进行异步消费.
finishRefresh
链接:Spring IoC之BeanDefinitionReader
org.springframework.context.support.AbstractApplicationContext#refresh
1、注册静态指定的监听器.2、获取所有ApplicationListener的beanName.3、前面进行了发布器的注册,现在可以发布一些early event.
链接:Spring的PostProcessor-后置处理器
链接:Spring 容器启动流程简要过程
1、切换容器状态为active.2、初始化Environment的propertySources属性.一般指配置项.3、验证是否可以解析必填的属性.4、查看是否有事件监听器监听prepare行为,如果有进行注册。5、创建ApplicationEvent.
initMessageSource
doRegisterBeanDefinitions
Class文件配置文件xml
链接:[Spring]BeanDefinitionRegistry-BeanDefinition注册
完成此上下文的bean工厂的初始化,初始化所有剩余的单例bean。聚焦在实例化这三个字.1、Spring注册了EmbeddedValueResolver用来解析Value属性。2、注册了一些用于AOP操作的LoadTimeWeaverAwares.3、缓存BeanDefinition元数据.4、开始实例化剩余的非延迟加载的单例类(容器默认注册的bean都是这个级别.)
激活在容器中注册为bean的BeanFactoryPostProcessor。简短的概括为: 实例化并调用所有注册的BeanFactoryPostProcessor Bean,并遵循显式顺序(如果给定)。感兴趣的朋友可以看我的注解容器扫描过程中,是如何通过内置的BeanDefinitionRegistryPostProcessor来加载注解标记bean的.
parseDefaultElement
registerBeanDefinitions
synchronized (this.startupShutdownMonitor) {...}
ConfigurationClassBeanDefinitionReaderJdbcBeanDefinitionReaderGroovyBeanDefinitionReader
parseBeanDefinitions
检测是否存在该BeanDefinition且存在于IOC中
0 条评论
回复 删除
下一页