一:主启动类的探究

1、使用核心注解@SpringBootApplication标示在类上,标示该类风湿SpringBoot的主配置类,就应该运行这个类的main方法来进行 启动SpringBoot的应用

1、注解SpringBootConfiguration

1、@SpringBootApplication注解中包含了如下组合注解

2、SpringBootConfiguration标注在某个类上标示该类是SpringBoot的配置类




spring boot refreshscope不生效 springboot @configuration不生效_类加载器


3、在点击SpringBootConfiguration注解可以看到有个Spring定义的@Configuration注解标注在类上为配置类就相当于Spring之前的配置文件


spring boot refreshscope不生效 springboot @configuration不生效_spring_02


4、在进行点击@Configuration注解可以看到有个@Component,


spring boot refreshscope不生效 springboot @configuration不生效_spring_03


2、注解@EnableAutoConfiguration

1、开启自动的配置功能

2、以前我们需要配置的代码,SpringBoot帮我们自动的进行配置。而注解@EnableAutoConfiguration就是告知SpringBoot开启自动配置的功能,这样自动配置才能生效

1)、@AutoConfigurationPackage

1、点击@EnableAutoConfiguration中会发现有个组合注解@AutoConfigurationPackage


spring boot refreshscope不生效 springboot @configuration不生效_spring_04


2、这个注解表示用于自动配置包点击该注解的可以看到有个Spring底层的注解@Import,就是给容器中导入组件,由AutoConfigurationPackages.Registrar.class进行决定


spring boot refreshscope不生效 springboot @configuration不生效_类加载器_05


3、点进Registrar.class这个类可以看到核心的注册并定义信息方法;metadata是注解的原信息,可运行DUG进行查看


spring boot refreshscope不生效 springboot @configuration不生效_spring_06


4、@AutoConfigurationPackage本身的含义就是将主配置类也就是《@SpringBootApplication标示的类》所在包及子包里面所有的组件进行扫描到Spring容器中

2)、@Import(EnableAutoConfigurationImportSelector.class)

1、给容器导入组件的,那是导入的那些组件呢?

2、导入的选择由EnableAutoConfigurationImportSelector.class这个选择器类进行决定

3、点击该类中的父类可以看到有个 selectImports方法;


spring boot refreshscope不生效 springboot @configuration不生效_类加载器_07


4、这个方法就是告诉要导入的那些组件,会给容器导入很多的自动配置类(xxxAutoConfiguration),就是给容器导入这个场景需要的所有的组件,并配置好这些组件;有多个(xxxAutoConfiguration)


spring boot refreshscope不生效 springboot @configuration不生效_类加载器_08


①)、那么这些组件是什么获取的呢?

1、点击List configurations = getCandidateConfigurations(annotationMetadata, attributes);这个方法;可以看到有个类加载loadFactoryNames的方法在进行点击该方法可以看到一个classLoader.getResources()类加载器获取的一个资源

2、将这个资源当成Properties文件获取工厂的名称


spring boot refreshscope不生效 springboot @configuration不生效_springboot事物注解不生效_09


3、点击这个classLoader.getResources()类加载器的资源可以看到"META-INF/spring.factories";


spring boot refreshscope不生效 springboot @configuration不生效_springboot事物注解不生效_10


4、返回到spring-boot-autoconfigure包中可以看到spring.factories,而这个文件中就有EnableAutoConfiguration指定的值。将这个值作为自动配置类导入到容器中,那么配置类就生效,帮我们进行自动配置

5、Java EE所右的整合解决方案,和自动配置都在spring-boot-autoconfigure包中