阅读收获
????理解SpringBoot自动配置原理
01SpringBoot是什么
SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。
简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。
02SpringBoot的特点
提供了固定的配置来简化配置,即约定大于配置
尽可能地自动配置Spring和第三方库,即能自动装配
内嵌容器,创建独立的Spring应用
让测试变的简单,内置了JUnit、SpringBootTest等多种测试框架,方便测试
提供可用于生产的特性,如度量、运行状况检查和外部化配置。
完全不需要生成代码,也不需要XML配置。
03启动类
下面探究SpringBoot的启动原理,关于一些细节就不赘述,我们捉住主线分析即可。
注意:本文的SpringBoot版本为2.6.1
3.1SpringBootApplication一切的来自起源SpringBoot的启动类,我们发现main方法上面有个注解:
SpringBootApplicationSpringBootApplicationpublicclassSpringbootWorkApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringbootWorkApplication.class,args);}}复制代码SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;它的本质是一个组合注解,我们点进去查看该类的元信息主要包含3个注解:Target({ElementType.TYPE})Retention(RetentionPolicy.RUNTIME)DocumentedInheritedSpringBootConfigurationEnableAutoConfigurationComponentScan(excludeFilters={Filter(type=FilterType.CUSTOM,classes={TypeExcludeFilter.class}),Filter(type=FilterType.CUSTOM,classes={AutoConfigurationExcludeFilter.class})})publicinterfaceSpringBootApplication{复制代码SpringBootConfiguration(里面就是Configuration,标注当前类为配置类,其实只是做了一层封装改了个名字而已)EnableAutoConfiguration(开启自动配置)ComponentScan(包扫描)注:
Inherited是一个标识,用来修饰注解,如果一个类用上了Inherited修饰的注解,那么其子类也会继承这个注解我们下面逐一分析这3个注解作用
3.1.1
SpringBootConfiguration我们继续点
SpringBootConfiguration进去查看源码如下:Target({ElementType.TYPE})Retention(RetentionPolicy.RUNTIME)DocumentedConfigurationIndexedpublicinterfaceSpringBootConfiguration{AliasFor(annotation=Configuration.class)booleanproxyBeanMethods()defaulttrue;}复制代码Configuration标注在某个类上,表示这是一个springboot的配置类。可以向容器中注入组件。3.1.2
ComponentScanComponentScan:配置用于Configuration类的组件扫描指令。提供与SpringXML的context: