spring-ioc加载流程
2024-03-23 20:27:12 0 举报
Spring refresh 核心流程
作者其他创作
大纲/内容
创建早期事件监听器对象收集早起的事件在事件发布器可用的时候发布
注册所有监听器到多波器中
prepareRefresh()准备刷新上下文环境
主要注入对@AutoWired,配置类,@Required,JPA,事件监听处理器等
发布ContextRefreshedEvent
添加一下 spring 提供的 bean
把事件监听器注册到多播器上 registerListeners()
实例化我们的单实例bean. finishBeanFactoryInitialization(beanFactory)
忽略一下spring的Aware接口
注册所有实现 BeanPostProcessor接口的处理器
最后容器刷新 finishRefresh()
prepareBeanFactory(beanFactory);对bean工厂进行填充属性,做好创建bean的准备
初始化国际化资源处理器.\t\t\t\tinitMessageSource()
主要关心ConfigurationClassPostProcessor处理配置类
初始化@Conditional 处理器ConditionEvaluator
AbstractApplicationContext#refreshspring容器启动核心流程
AnnotationConfigUtils#registerAnnotationConfigProcessors注册一些配置的后置处理器
obtainFreshBeanFactory()通过子类实现获取bean工厂
扩展方法,目前springBoot启动Tomcat
获取或创建多波器默认为SimpleApplicationEventMulticaster
AnnotatedBeanDefinitionReader注解方式读取bean定义
创建
doScan找到所有的Bean
调用 bean 工厂的后置处理器 invokeBeanFactoryPostProcessors(beanFactory)所有的Bean定义都已经加在,但是还没有开始实例化
scan(String... basePackages)扫描bean定义
registerDefaultFilters添加默认的过滤器用来扫描我们classpath下的标注了@Component的对象,以及JSR250,JSR330规范
先处理实现PriorityOrdered的处理器,然后按照Ordered接口排序再剩下的
AnnotationConfigApplicationContext
PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
先创建实现LoadTimeWeaverAware接口的bean处理关于aspectj等代理
注册ApplicationContextAwareProcessor处理各种Aware接口
AbstractApplicationContext#initPropertySources初始化占位符资源
创建事件多播器\t\t\t\tinitApplicationEventMulticaster()
实例化剩余的所有单例bean
注册bean的后置处理器 registerBeanPostProcessors(beanFactory)
注册ApplicationListenerDetector Bean后置处理器添加所有ApplicationListener
冻结所有Bean定义
发送所有早期事件
onRefresh()
postProcessBeanFactory所有的Bean定义都已经加在,但是还没有开始实例化,留给子类进行扩展
调用SmartInitializingSingleton#afterSingletonsInstantiated所有非Lazy单例Bean都初始化完了
ConfigurablePropertyResolver#validateRequiredProperties校验必须要用的资源是否存在
ClassPathBeanDefinitionScannerbean定义扫描
0 条评论
下一页