(1)首先查看启动类,类上有一个@SpringBootApplication
注解。
该注解标注在某个类上,说明该类为 SpringBoot的主配置类;运行这个类的main()
方法来启动该Spring Boot的应用。
(2)点开@SpringBootApplication
注解,我们能够发现,其实它是一个组合注解
。下面我们重要看注解 @SpringBootConfiguration
和 @EnableAutoConfiguration
。
@SpringBootConfiguration注解
下面看一下@SpringBootConfiguration
注解:
表明该类是一个Spring的配置类。
下面看一下@Configuration
注解:
表明Spring的配置类也是Spring的一个组件。@EnableAutoConfiguration注解
@EnableAutoConfiguration注解
是开启自动配置的功能的。
先看一下@AutoConfigurationPackage
这个注解:
注:这个注解是自动配置包,使用的是@Import
来给Spring容器中导入一个组件
,这里导入的是AutoConfigurationPackages.Registrar.class
。继续看AutoConfigurationPackages.Registrar.class
:
注:通过这个方法来获取扫描的包路径。
我们在该代码处,打个断点,debug项目,看一下获取到的包路径:
再来计算一下metadata的值:
这个也就是@SpringBootApplication
注解上的Springboot01HelloworldApplication类,也就是主配置类。
注:就是将主配置类——@SpringBootApplication
标注的类的所在包以及子包里面所有组件扫描加载到Spring容器中。
经过上面的分析,知道并获取了包扫描的路径,下面看一下具体加载的组件。
@Import(AutoConfigurationImportSelector.class)注解
这个注解就是给Spring容器导入组件,
@Import注解就是给Spring容器中导入一些组件;AutoConfigurationImportSelector.class
:是组件的选择器。
在AutoConfigurationImportSelector
类中有个selectImports
方法,该方法是将所有需要导入的组件以全类名的方式返回。——因此这些组件就会添加到容器中了。
类似的,在代码处打个断点,debug
下面分析具体怎样获取这些配置类的:
最后从META-INF/spring.factories
中获得资源,然后通过Properties
来进行加载资源。
spring-boot-autoconfigure包下META-INF/spring.factories:
注:SpringBoot就会把这些自动配置类加到容器中。