Spring启动流程_简易版
2023-10-31 10:43:46 0 举报
Spring启动流程
作者其他创作
大纲/内容
调用自身构造函数
设置默认的资源读取器
注册所有bean的后置处理器
获取Bean工厂
如果有id为messageSource,而且类型是MessageSource的组件,直接赋值给messageSource属性
根据类型获取listener监听器的名称并注册到事件派发器
添加后置处理器ApplicationContextAwareProcessor处理回调接口
执行所有BeanDefinitionRegistryPostProcessor接口的postProcessBeanFactory方法
依次调用所有实现了PriorityOrdered接口、Ordered接口、普通未实现Ordered接口和PriorityOrdered接口的BeanFactoryPostProcessor的postProcessBeanFactory方法
初始化classpath格式的Bean定义扫描器ClassPathBeanDefinitionScanner
依次将实现PriorityOrdered接口、Ordered接口和普通的Bean后置处理器排序后添加到bean工厂
再次检测有没有注册bean名称为loadTimeWeaver,有的话则给bean工厂中加入LoaderTimeWeaverAwareProcessor后置处理器
记录当前容器信息
找出剩下的实现BeanDefinitionRegistryPostProcessor接口但没实现Ordered接口和PriorityOrdered接口的BeanDefinitionRegistryPostProcessor实现类,排序后执行其postProcessBeanDefinitionRegistry方法
清除公共缓存
再次找出Bean工厂中所有实现BeanDefinitionRegistryPostProcessor接口和Ordered接口的bean,排序后执行其postProcessBeanDefinitionRegistry方法
将上边bean后置处理器中实现了MergedBeanDefinitionPostProcessor接口的Bean后置处理器排序后再添加到bean工厂,将这些放到列表后边
提前初始化所有的单实例Bean
执行bean工厂的后置处理器
找出Bean工厂中所有实现BeanDefinitionRegistryPostProcessor接口和PriorityOrdered接口的bean,排序后执行其postProcessBeanDefinitionRegistry方法
解析公共注解上面的元数据信息注册到bean定义中
初始化消息源
校验设置的必须属性是否都存在环境信息中
解析配置类并将配置类封装为一个bean定义注册到Bean定义注册中心
在Context中发布刷新事件
设置默认的环境信息
如果没有,则创建一个DelegatingMessageSource类型的messageSource对象,赋值给messageSource属性并将其注册到bean工厂中
初始化类型转换服务
发布事件
给bean工厂添加BeanPostProcessorChecker后置处理器,用于记录Bean在BeanPostProcessor实例化时的信息
缓存(冻结)所有的BeanName
忽略回调接口的自动注入
删除元数据(bean名称,bean定义等)缓存
获取bean工厂
将qualifiers和definitionCustomizers注册到bean定义
初始化所有剩余的单实例Bean
解析@Scope注解的元信息,给bean定义设置作用域
给容器中注册一些与运行环境相关的单实例Bean
注册注解后置处理器
初始化事件派发器
初始化earlyApplicationListeners和earlyApplicationEvents用来保存容器中的早期监听器和事件
执行应用上下文初始后置处理器集合beanFactoryPostProcessors中有实现BeanDefinitionRegistryPostProcessor接口的后置处理器的postProcessBeanDefinitionRegistry方法
如果没有,则创建一个SimpleApplicationEventMulticaster类型的ApplicationEventMulticaster对象,赋值给applicationEventMulticaster属性并将其注册到bean工厂中
Bean工厂初始化后扩展
执行Bean工厂的所有后置处理器
获取bean名称,如未指定名称则默认使用JDK默认规则生成
可通过继承应用上下文AnnotationConfigApplicationContext重写postProcessBeanFactory方法进行扩展
初始化注解形式的Bean定义扫描器AnnotatedBeanDefinitionReader
初始化BeanDefinitionRegistry
给bean定义注册supplier回调方法
使用声明周期处理器传播刷新事件
刷新工厂
如存在名称为loadTimeWeaver的bean定义,则给bean工厂中加入LoaderTimeWeaverAwareProcessor后置处理器
初始化嵌入值解析器
判断配置类是否满足@Conditional注解的条件
重复添加ApplicationListenerDetector后置处理器
将本Context注册到ListBeansView中
获取所有BeanPostProcessor的实现类
准备上下文的刷新工作
初始化一些特殊的Bean
注册默认的filters
bean工厂的初始化准备工作
将注册的监听器绑定到事件派发器
清空资源缓存
注册监听器
注册自动注入的接口的指定类
派发之前产生的事件
执行容器的刷新操作
调用AnnotationConfigApplicationContext(AppConfig.class)启动Spring容器
bean定义的信息封装到BeanDefinitionHolder后注册到bean定义注册中心
如果有id为applicationEventMulticaster,而且类型是ApplicationEventMulticaster的组件,直接赋值给applicationEventMulticaster属性
执行所有普通的BeanFactoryPostProcessor的postProcessBeanFactory方法。这些BeanFactoryPostProcessor是应用上下文初始后置处理器集合beanFactoryPostProcessors里未实现BeanDefinitionRegistryPostProcessor接口的
查找bean工厂中所有实现了BeanFactoryPostProcessor接口的实现类
设置类加载器、SPEL表达式解析器、类型转换器
停止使用临时的类加载器
获取DefaultListableBeanFactory
初始化声明周期处理器
添加后置处理器ApplicationListenerDetector
初始化用于处理条件注解的对象ConditionEvaluator,同时初始化ConditionContextImpl
实例化注解形式的Bean定义AnnotatedGenericBeanDefinition
默认为空,需通过继承AbstractApplicationContext覆写该方法
初始化所有实现了LoadTimeWeaverAware接口的子类
收藏
0 条评论
下一页