标签:xmla filesyste 输入 npos 扫描 config loader text 上下文
Spring启动过程经常在面试中会被问到,下面来梳理下Spring启动到底在干什么。
首先要知道启动的入口:
初始化上下文(WebApplicationContext),和配置文件相关常用到的上下文实现有:
1、ClassPathXmlApplicationContext
2、FileSystemXmlApplicationContext
3、XmlWebApplicationContext(默认)
这两种都是通过一个spring配置文件来初始化上下文,通常web工程会使用一个继承了ContextLoaderListener监听器来启动Spring上下文的配置。
1、通过ServletContext(如果Tomcat的StandardContext) 生成一个ApplicationContext (使用XmlWebApplicationContext,反射使用newInstance)
2、配置和刷新上下文(主要工作都在这里面做)
a、获取配置文件
b、配置上下文刷新
A、准备工作
B、创建BeanFactory(DefaultListableBeanFactory)
1、new 一个DefaultListableBeanFactory
2、加载Bean
a、new 一个reader用来读配置文件 XmlBeanDefinitionReader
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-**.xml</param-value>
</context-param>
b、加载配置文件,和配置文件中的bean(到此我们定义的bean已经是BeanDefinition对象)
1、将配置文件读为输入流
2、将配置文件解析为Document
3、分析节点,根据节点获取不同的解析策略
4、根据解析策略解析节点(包括我们常用的扫描包中的bean文件)
C、设置beanFactory的一些参数
D、获取beanFactory的postProcessor()
1、比如配置了MapperScannerConfigurer则扫描Mapper和dao (根据ClassLoader查找配置目录的资源)
E、加载所有的beanPostProcessor
F、实例所有非延迟初始化的bean (一般都是使用默认构造方法反射生成)
到此spring上下文已经初始完成。
标签:xmla filesyste 输入 npos 扫描 config loader text 上下文
原文地址:https://www.cnblogs.com/souyoulang/p/8762557.html