spring boot关键流程分析:
运行 SpringBootTestApplication.main()
第一个步是加载入口类 SpringBootTestApplication,此类相当于spring的配置类。因为里面包含@configuration注解
将 SpringBootTestApplication的类文件存入 this.sources集合, 然后推断当前运行环境是不是web环境。
进入prepareContext方法
从之前存入到sources集合里面取出 SpringBootTestApplication类文件信息,调用红圈的load方法,把SpringBootTestApplication
转化成beandefiniton类,注册到spring 的beandefintionMap容器
第二步 点击SpringBootTestApplication上的注解,会看到@Import(EnableAutoConfigurationImportSelector.class)。进入
EnableAutoConfigurationImportSelector类,其父类里面
这里利用spring的功能,动态加载配置类文件,这里动态加载配置类文件,采用高明的spring SPI机制,不懂SPI机制的
另外去看看这方面的资料,最终目的是自动装配第三方组件。在spring boot里面只要把第三方组件的jar包引进来就可以自动装配
纳入spring 容器管理,比如 rabbitMQ,redis客户端,等等。
第三步:
进入 refreshContext(context)方法 目的就是启动spring 容器,跟进去
进入
invokeBeanFactoryPostProcessors方法
进入后置处理器 ConfigurationClassPostProcessor.processConfigBeanDefinitions()方法
如图:
进入 parser.parse(candidates) 目的是把 SpringBootTestApplication所在包下的所有类扫描出来,并且注册到spring beandefinitionMap里面
纳入spring 容器管理。
第四部:启动 内嵌的tomcat 整合进spring mvc
原文:https://www.cnblogs.com/jingzhi-sksk/p/12902012.html