Spring Boot原理
2021-02-08 19:27:13 1 举报
Spring Boot原理
作者其他创作
大纲/内容
首先是要通过Maven父子工程集成需要的Jar;再根据条件注解,注入需要的Bean。@ConditionalOnMissingBean 根据是否加载了某个Bean选择是否加载当前Bean@ConditionalOnProperty 根据属性条件选择注入@ConditionalOnWebApplication 根据容器类型注入条件满足的时候才注入......
listeners.started(context)回调所有 SpringApplicationRunListener 的 started 方法
1、默认为SERVLET环境;2、如果存在类DispatcherHandler且没有WEB环境相关的关键类(DispatcherServlet、ServletContainer)加载,则为REACTIVE环境;3、如果没有加载Servlet/ConfigurableWebApplicationContext则为NONE。
调用configurationClassParser的processConfigurationClass方法conditionEvaluator.shouldSkip 实现条件注解Condition原理
getOrCreateEnvironment()准备或者创建环境
listeners.contextLoaded(context)回调所有 SpringApplicationRunListener 的 contextLoaded 方法
① deduceFromClasspath() 判断环境
② deduceMainApplicationClass()从传入的配置类中寻找 main 方法,设置到mainApplicationClass
listeners.contextPrepared(context)回调所有 SpringApplicationRunListener 的 contextPrepared 方法
RabbitAutoConfiguration
调用configurationClassParser的parse方法
根据webApplicationType创建不同的容器。SERVLET:AnnotationConfigServletWebServerApplicationContextREACTIVE:AnnotationConfigReactiveWebServerApplicationContextDEFAULT:AnnotationConfigApplicationContext
ConfigurationClassPostProcessor实现@Import功能调用processConfigBeanDefinitions
④ callRunners(context)从容器中获取所有的 ApplicationRunner 和 CommandLineRunner,回调 run 方法
SpringApplication#<init> 构造 SpringApplication 对象
grouping.getImports()
WebMvcAutoConfiguration
@Import({AutoConfigurationImportSelector.class})AutoConfigurationImportSelector实现DeferredImportSelector
如何实现自动化配置
TransactionAutoConfiguration
.....
@EnableAutoConfiguration
setInitializers()从 META-INF/spring.factories 目录下获取 ApplicationContextInitializer 类型
③ createApplicationContext()创建 IOC 容器,判断常见普通的 IOC 容器还是 Web IOC 容器
@SpringBootApplication
listeners.environmentPrepared(environment)回调所有 SpringApplicationRunListener 的 environmentPrepared 方法
deferredImportSelectorHandler.handle
ServletWebServerApplicationContext通过钩子方法调用onRefresh()创建web容器(createWebServer)
initializer.initialize(context)回调所有 ApplicationContextInitializer 的 initialize 方法
调用parser的doProcessConfigurationClass
AopAutoConfiguration
prepareEnvironment()准备上下文环境,将 environment 保存到 IOC 容器中
run(args)调用 run 方法
handler.processGroupImports()
listeners.running(context)回调所有 SpringApplicationRunListener 的 running 方法
AutoConfigurationGroup process(收集) selectImports(加入容器)获取所有自动装配类(META-INF/spring.factories)SPI获取EnableAutoConfiguration为key的所有实现类
setListeners()从 META-INF/spring.factories 目录下获取 ApplicationListener 类型
AnnotationConfigServletWebServerApplicationContext容器创建时,构造器内通过AnnotatedBeanDefinitionReader将常用的PostProcessor注入(ConfigurationClassPostProcessor)(AnnotationConfigUtils#registerAnnotationConfigProcessors)
printBanner()打印 banner 信息
listeners.starting()回调所有SpringApplicationRunListener的starting方法
refreshContext()刷新 IOC 容器,核心步骤
prepareContext()准备上下文环境
启动干了什么?1、要完成Spring容器的启动2、把项目部署到tomcat
getRunListeners()从 META-INF/spring.factories 目录下获取SpringApplicationRunListener类型
调用parser的processImports走selector instanceof DeferredImportSelector分支逻辑
0 条评论
下一页