spring boot 启动ioc 容器
2021-04-14 16:43:15 0 举报
spring boot 启动ioc 容器过程
作者其他创作
大纲/内容
解析成bean定义
finishBeanFactoryInitialization
BeanDefinitionMap
注册创世纪的读取配置类的解析器
webApplicationType 会自动推断程序的启动方式如果引入了javax.servlet.Servlet的jar,则会启动Servlet模式,如果引入的jar是spring-boot-starter-webflux,而且没引入servlet相关的jar,则会启动Reactive模式。这也是Spring Boot的设计思想:拔插而决定application的启动方式。
invokeBeanFactoryPostProcessors
根据 webApplicationType 生成new AnnotationConfigServletWebServerApplicationContext 把当前类当成配置类传过去
SpringApplication.run
this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class)); 通过spring.factories 文件找到key 为 ApplicationListener.class 的值 创建监听器 然后发布事件通知这个监听器读取配置文件
BeanDefinitionReader 读取BeanDefinition
BeanDefinition
javaConfig@Beanxml@Import
Spring boot起手架
将bean定义生产成bean
读取全局配置文件。。。
解析传进来的配置类
BeanDefinitionRegistry 注册BeanDefinition
SpringIOCBean
获取servlet 容器ServletWebServerFactory,如果外嵌的就传外嵌的,如果为空就创建一个,在invokeBeanFactoryPostProcessors 已经自动解析了 servlet 自动装置类 Tomcat 容器的注解@Bean 就在这里 然后创建Tomcat 容器
BeanFactory
解析各种注解
spring boot 重写了上下文类 ApplicationContext因为spring 的 refresh 方法中的onRefresh();留了个空方法,就是为了让其他组件插拔式的组合spring boot 就是重写了onRefresh方法来加载ioc 容器启动内嵌Tomcat的
protected void onRefresh() { super.onRefresh(); try { this.createWebServer(); } catch (Throwable var2) { throw new ApplicationContextException(\"Unable to start web server\
BeanDefinitionScanner 扫描BeanDefinition
不同的上下文容器Context 执行顺序 执行方法会不同
refresh
收藏
0 条评论
下一页