一:主启动类的探究
1、使用核心注解@SpringBootApplication标示在类上,标示该类风湿SpringBoot的主配置类,就应该运行这个类的main方法来进行 启动SpringBoot的应用
1、注解SpringBootConfiguration
1、@SpringBootApplication注解中包含了如下组合注解
2、SpringBootConfiguration标注在某个类上标示该类是SpringBoot的配置类
3、在点击SpringBootConfiguration注解可以看到有个Spring定义的@Configuration注解标注在类上为配置类就相当于Spring之前的配置文件
4、在进行点击@Configuration注解可以看到有个@Component,
2、注解@EnableAutoConfiguration
1、开启自动的配置功能
2、以前我们需要配置的代码,SpringBoot帮我们自动的进行配置。而注解@EnableAutoConfiguration就是告知SpringBoot开启自动配置的功能,这样自动配置才能生效
1)、@AutoConfigurationPackage
1、点击@EnableAutoConfiguration中会发现有个组合注解@AutoConfigurationPackage
2、这个注解表示用于自动配置包点击该注解的可以看到有个Spring底层的注解@Import,就是给容器中导入组件,由AutoConfigurationPackages.Registrar.class进行决定
3、点进Registrar.class这个类可以看到核心的注册并定义信息方法;metadata是注解的原信息,可运行DUG进行查看
4、@AutoConfigurationPackage本身的含义就是将主配置类也就是《@SpringBootApplication标示的类》所在包及子包里面所有的组件进行扫描到Spring容器中
2)、@Import(EnableAutoConfigurationImportSelector.class)
1、给容器导入组件的,那是导入的那些组件呢?
2、导入的选择由EnableAutoConfigurationImportSelector.class这个选择器类进行决定
3、点击该类中的父类可以看到有个 selectImports方法;
4、这个方法就是告诉要导入的那些组件,会给容器导入很多的自动配置类(xxxAutoConfiguration),就是给容器导入这个场景需要的所有的组件,并配置好这些组件;有多个(xxxAutoConfiguration)
①)、那么这些组件是什么获取的呢?
1、点击List configurations = getCandidateConfigurations(annotationMetadata, attributes);这个方法;可以看到有个类加载loadFactoryNames的方法在进行点击该方法可以看到一个classLoader.getResources()类加载器获取的一个资源
2、将这个资源当成Properties文件获取工厂的名称
3、点击这个classLoader.getResources()类加载器的资源可以看到"META-INF/spring.factories";
4、返回到spring-boot-autoconfigure包中可以看到spring.factories,而这个文件中就有EnableAutoConfiguration指定的值。将这个值作为自动配置类导入到容器中,那么配置类就生效,帮我们进行自动配置
5、Java EE所右的整合解决方案,和自动配置都在spring-boot-autoconfigure包中