AbstractApplicationContext 分析

启动流程
// Prepare this context for refreshing.
prepareRefresh();
1.
// Initialize any placeholder property sources in the context environment
//预处理配置,目前看到WEB层实现(预处理WEB配置)
initPropertySources();

2. // Validate that all properties marked as required are resolvable
// see ConfigurablePropertyResolver#setRequiredProperties
//验证系统配置
getEnvironment().validateRequiredProperties();

// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

// Prepare the bean factory for use in this context.
//预处理beanFactory
prepareBeanFactory(beanFactory);

try {
// Allows post-processing of the bean factory in context subclasses.
//预处理beanFactory之后 后期处理 目前也看到只有WEB实现(注册相关依赖)
postProcessBeanFactory(beanFactory);

// Invoke factory processors registered as beans in the context.
//执行beanFactory后期处理
invokeBeanFactoryPostProcessors(beanFactory);
//处理流程优先级(本身实例不考虑)
1.BeanDefinitionRegistryPostProcessor
2.BeanFactoryPostProcessor
3.BeanFactoryPostProcessor(插件处理) priorityOrdered -> ordered ->nonOrdered

// Register bean processors that intercept bean creation.
//注册后期处理器 (扫描接口 BeanPostProcessor)
registerBeanPostProcessors(beanFactory);
//执行优先级 PriorityOrdered -> ordered -> nonOrdered

// Initialize message source for this context.
//初始化 国际化对象
initMessageSource();

// Initialize event multicaster for this context.
//初始化事件广播对象
initApplicationEventMulticaster();

// Initialize other special beans in specific context subclasses.
//完成处理后期后,刷新 目前也只看到web跟 DefaultLifecycleProcessor 实现
onRefresh();

// Check for listener beans and register them.
//注册处理spring 事件 优先级本身实例事件 -> 扫描所有 spring 事件接口对象
registerListeners();

// Instantiate all remaining (non-lazy-init) singletons.
//初始化完成 beanFactory 处理器
finishBeanFactoryInitialization(beanFactory);

// Last step: publish corresponding event.
//完成beanFactory容器处理
finishRefresh();
1.initLifecycleProcessor();//初始化生命周期处理器
2.getLifecycleProcessor().onRefresh();//刷新生命周期处理器
3.publishEvent(new ContextRefreshedEvent(this)); //发布ContextRefreshedEvent事件
4.registerApplicationContext();//注册上下文

关闭容器事件
1.Runtime.getRuntime().removeShutdownHook(this.shutdownHook); //移动JVM线程级监控
2.LiveBeansView.unregisterApplicationContext(this);//清空上下文 unregisterMBean
3.publishEvent(new ContextClosedEvent(this)); //发布关闭事件
4.getLifecycleProcessor().onClose();
5.destroyBeans()//没看到有实现
6.closeBeanFactory();//删除BEAN
7.// Let subclasses do some final clean-up if they wish...
onClose()

小结 :
1.预处理后注入相关依赖 实现 BeanFactoryPostProcessor
2.预处理后修改bean 实现 BeanPostProcessor
3.完成预处理后执行 实现 DefaultLifecycleProcessor

4.完成整个加载后执行 实现 ApplicationListener ContextRefreshedEvent 事件

5.关闭并且在销毁之前 实现 DefaultLifecycleProcessor 或 ApplicationListener ContextClosedEvent 事件

FactoryBean,AbstractFactoryBean<T> ,InitializingBean ,DisposableBean,BeanFactoryAware

spring 启动流程的更多相关文章

  1. Spring启动流程—源码解读

    https://blog.csdn.net/yangliuhbhd/article/details/80790761 Spring的AbstractApplicationContext的refresh ...

  2. Spring启动流程

    首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境: 其次,在web.xm ...

  3. Spring Boot启动流程详解(一)

    环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...

  4. activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring ...

  5. Spring基础系列-容器启动流程(1)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9870339.html 概述 ​ 我说的容器启动流程涉及两种情况,SSM开发模式和Spri ...

  6. Spring基础系列-容器启动流程(2)

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9503210.html 一.概述 这里是Springboot项目启动大概流程,区别于SSM ...

  7. Spring启动过程分析】(1)启动流程简介

    1. spring简介 spring的最基本的功能就是创建对象及管理这些对象之间的依赖关系,实现低耦合.高内聚.还提供像通用日志记录.性能统计.安全控制.异常处理等面向切面的能力,还能帮我们管理最头疼 ...

  8. Spring Boot启动流程详解

    注:本文转自http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow 环境 本文基于Spring Boot版本1.3.3, 使用了sp ...

  9. Spring启动执行流程梳理

    注:本文梳理启动流程使用的Spring版本:4.0.2.RELEASE 使用spring配置,都需要在web.xml中配置一个spring的监听器和启动参数(context-param),如下: &l ...

随机推荐

  1. jQuery Ztree基本用法

    1.首先在页面上有<ul/>标签 <ul id="tree" class="ztree"></ul> 2.定义ztree的配 ...

  2. Redis教程(九):主从复制配置实例

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/136.html 一.Redis的Replication: 这里首先需要说明 ...

  3. netstat常见参数

    -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字.-l 仅列出有在 Lis ...

  4. windows下安装mingw

    windows环境下使用gcc MinGw是Minimal GNU on Windows的缩写,允许在GNU/linux和windows平台生成本地的windows程序而不需要第三方运行时库.本文主要 ...

  5. 【关于新版Cocos2dx/Cocos2d-JS】安装包和使用方式的变化

    最近有读者反馈说,最新的Cocos2dx或者说2d-JS下载之后跟书本说的安装方式相差很大. 刚下载最新版3.9试了一下,其实用法还是没有变的. 新版把cocos2dx和cocos2d-js合并了,这 ...

  6. hdu 2955 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 如果认为:1-P是背包的容量,n是物品的个数,sum是所有物品的总价值,条件就是装入背包的物品的体积和不能 ...

  7. 通过weburl 启动windows程序

    1. 注册表修改 建立一个reg文件 执行导入  以RunLocal协议为例子 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\RunL ...

  8. Activiti 查询流程定义

    package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...

  9. gearman mysql udf

    gearman安装 apt-get install gearman gearman-server libgearman-dev 配置bindip /etc/defalut/gearman-job-se ...

  10. CMSIS OS None

    /* ---------------------------------------------------------------------- * Copyright (C) 2011 ARM L ...