自动配置原理:
在boot程序启动后,起步依赖中的一些bean会自动注入ioc容器中
引入web依赖后,Springboot会自动注入dispatcherServlet对象
答:在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解,EnableAutoConfiguration注解又组合了Import注解,导入了AutoConfigurationImportSelector类,实现selectImports方法,这个方法经过层层调用,最后会读取META—INF目录下的 后缀名为imorts的文件,当然了,boot2.7以前的版本,读取的是spring.factories文件,读取到全类名了之后,会解析注册条件,也就是@Conditional及其衍生注解,把满足注册条件的Bean对象自动注入到IOC容器中
SpringBoot启动流程
- new SpringApplication()
-
- 1.确认web应用的类型
- 2. 加载ApplicationContextInitializer(初始化器)
- 3. 加载ApplicationListener(监听器)
- 4. 记录主启动类
- run()
-
- 1.准备环境对象Environment,用于加载系统属性等等
- 2. 打印Banner(控制台显示的Spring)
- 3.实例化容器Context
- 4.准备容器(因为容器要初始化bean并管理),为容器设置Environment、BeanFactoryPostProcessor(bean工程的后置处理器),并加载主类对应的BeanDefinition
- 5.刷新容器(为容器创建所有Bean实例)
- 6.返回容器
IOC容器初始化流程
- AbstractApplicationContext.refresh ()
-
- 1. 准备BeanFactory (DefaultListableBeanFactory)
-
-
- 设置ClassLoader(类加载器)
- 设置Environment(为bean工厂设置实例化需要的属性)
-
-
- 2.扫描要放入容器中的Bean,得到对应的BeaDefinition(只扫描,并不创建)
- 3. 注册BeanPostProcessor
- 4. 处理国际化
- 5. 初始化事件多播器ApplicationEventMulticaster
- 6.启动tomcat
- 7. 绑定事件监听器和事件多播器
- 8. 实例化非懒加载的单例Bean
- 9. 扫尾工作,比如清空实例化时占用的缓存等