思维导图如下:
思维笔记如下:
分析以上注解含义:
@SprintgBootApplication(合成)注解
相当于:
@SpringBootConfiguration、
@EnableAutoConfiguration、
@ComponentScan
1 、 @SpringBootConfiguration 里面主要有@Configuration 代表当前是一个配置类
2 、 @ComponentScan 指定扫描哪些,spring注解。
3 、 最重要:@EnableAutoConfiguration(核心) 合成注解:
里面主要有:
@AutoConfigurationPackage 自动配置包 、
@import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage :
里面有 @import(…) 给容器导入一个组件(Registrar)
1.利用Registrar给容器中导入一系列组件
2.将指定一个包下的所有组件导入进来: MainApplication所在包下。
@import(AutoConfigurationImportSelector.class):
1.利用getAutoConfigurationEntry(annotationMetedata)给容器中批量导入一些组件
2.调用List configurations = getAutoConfigurationEntry(annotationMetedata,attributes)获取到所有需要导入容器中的
3.利用工厂加载Map<String,List< String >> loadSpringFactories (@Nullable ClassLoader classLoader):得到所有的组件
4.从META-INF/spring.factories 位置来加载一个文件。默认扫描我们当前系统META-INF/spring.factories 位置的文件
结论:
1.SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
2.将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
3.整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
4.它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
5.有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;