主要Spring的版本是5.2.2版本分析. Spring的ApplicationContext的刷新流程,总共是如下图中的十个步骤, 接下来会对每个步骤进行的详细介绍. 缓存
这个阶段主要
1) 设置startupDate,closed,active标识位.
2) 并初始化perpertySource和校验的properties的哪些是须要属性的配置.
3) 保存刷新以前的早期的earlyApplicationListeners监听器.
复制代码
1)建立Spring默认的BeanFactory实例是DefaultListableBeanFactory.
2)设置序列化serializationId,并缓存DefaultListableBeanFactory到Map对象.
3)自定义设置的BeanFactory中 allowBeanDefinitionOverriding和
allowCircularReferences,自定义缓存BeanDefinition是否容许重复
覆盖 和 是否容许循环饮引用.
4) 加载BeanDefinition到BeanFactory.,经过Xml或者Annotation的
方式,好比使用注解的方式获取beanDefinition,则是经过
AnnotatedBeanDefinitionReader去加载注解的BeanDefinition.
复制代码
这个是执行的postProcessBeforeInitialization方法时候,执行Aware回调, 将applicationContext设置到实现了ApplicationAware的bean中. 5) 设置能够忽略的依赖接口 EnvironmentAware,EmbeddedValueResolverAware,ResourceLoaderAware, ApplicationEventPublisherAware,MessageSourceAware,ApplicationContextAware, 这六个接口是依赖是能够跳过这个set的注入依赖的.由于这6个是Aware的回调的依赖. 6) 注册能够处理的依赖的. BeanFactory.class ---> DefaultListableBeanFactory ResourceLoader.class --> ApplicationContext ApplicationEventPublisher.class -> ApplicationContext ApplicationContext --> ApplicationContext 7) 增长一个BeanPostProcessor: ApplicationListenerDetector, 主要是是在postProcessAfterInitialization中检查Bean初始化完后哪些是ApplicationListener的bean,并加入ApplicationContext中. 8) 注册3个单例,第一个environment是,默认是建立的是StandardEnvironment,第二个是系统配置 systemProperties,
markdown
BeanFactroy的后置处理器,主要是为子类扩展使用,好比 AnnotationConfigServletWebApplicationContext就是使用 ClassPathBeanDefinitionScanner去扫描包下全部的注解的bean,并注册到 BeanDefinitionRegistry中app
BeanFactoryPostProcessor)post
分红3类,进行优先级排序处理BeanFacoty的调用postProcessBeanFactory,spa
BeanPostProcessor的名称. 2) 按照的实现了优先级的PriorityOrdered, Ordered 和没有实现前两个接口, 的分类排序,注册到BeanFactory. 3d
注册默认的MessageSource的Bean是DelegatingMessageSource, 这个是国际化的使用的,日常使用不多.code
主要是初始化一个默认事件发生器: SimpleApplicationEventMulticasterorm
Spring的是空的操做, 留给子类扩展实现,去作特殊Bean的初始化.好比像 Web的 扩展,是建立WebServer.对象
注册监听器到ApplicationEventMulticaster中.排序
DefaultLifecycleProcessor实例 3) 调用LifecycleProcessor的onFresh的方法 4) 发布 ContextRefreshedEvent事件 5) LiveBeansView注册ApplicationContext,( LiveBeansView是MBean中的, 是JVM监控用的)
总结: Spring的ApplicationContext的启动基本流程就是这个11个步骤,这个只是比较粗略的介绍各个步骤所负责的职责.后续在详细分析.