SpringBoot启动原理
2024-10-28 14:49:31 0 举报
SpringBoot启动原理
作者其他创作
大纲/内容
他是一个复合注解,主要由三个注解组成
调用AutoConfigurationPackages.Registrar#registerBeanDefinitions
导入@Import(AutoConfigurationPackages.Registrar.class)
解析@SpringBootConfiguration
注册PackageImports
AutoConfigurationPackages.Registrar因为这个类实现了ImportBeanDefinitionRegistrar
主要是扫描一些过滤器类
所谓过滤条件:配置文件中是否有和自动配置类相关的属性,如果有,则加入到组件中来
解析prepareContext
解析refreshContext
注册了启动类为bean定义
@SpringBootConfiguration 的作用是表示启动类是一个配置类(根据@Configuration来判断的)
自动配置包,将启动类所在的包以及子包下的组件类加入容器中
context = createApplicationContext();依据当前环境创建上下文,最后由ApplicationContextFactory来返回一个AnnotationConfigServletWebServerApplicationContext上下文
先分析@SpringBootApplication
找到所有META-INF/spring.factories里面的类
下面分析run()方法重要方法解析
分析@EnableAutoConfiguration
解析@ComponentScan
@EnableAutoConfiguration由两部分组成:@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class)
加载内置tomcat
@AutoConfigurationPackage
调用selectImports方法
AutoConfigurationImportSelector.class
开始
(根据过滤条件)将找到的类注册为bean定义
初始化AnnotationConfigServletWebServerApplicationContext上下文时:会创建bean定义读取器和bean定义扫描器。注册创世纪的那几个bean(最重要就是ConfigurationClassPostProcessor)
设置PackageImports类的packageNames为当前启动类所在的包
找到jar中的META-INF/spring.factories里面的自动配置类
初始化SpringApplication类,并赋值他的属性
这里解析配置类的那个类就是上一步注册的启动类(从beanDefinitionNames里面可以拿到)
refresh()->onRefresh()
以servlet环境为例子
以上springboot启动类注解分析完毕
0 条评论
下一页