@SpringBootApplication
从SpringBoot的启动类来看@SpringBootApplication
注解里面具有@SpringBootConfiguration
和@EnableAutoConfiguration
注解
@SpringBootConfiguration
注解里面包含了@Configuration
,它里面是@Component
,配置类和扫描组件注解
@EnableAutoConfiguration
回来继续看EnableAutoConfiguration自动配置注解,包含了@AutoConfigurationPackage
自动配置包和@Import
注解
我们进入AutoConfigurationPackages这个类,里面有个Registrar
静态内部类,将这个注解元数据注入到PackageImports
对象中,然后获取它的getPackageNames
,那么这个packageName就是我们要找的东西
得到的结果就是SpringBoot的启动类的包名,
总结:@AutoConfigurationPackage 的作用就是讲SpringBoot启动类所在的包 及其子包的所有组件扫描到Spring容器中
@Import(AutoConfigurationImportSelector.class)
回到EnableAutoconfiguration中,注解@Import导入了AutoConfigurationImportSelector属性,在这个类中找到getCandidateConfigurations
方法
查看其中的loadFactoryNames
方法
classLoader.getResources(FACTORIES_RESOURCE_LOCATION)
而它的值就是我们要找的spring.factories文件
spring-boot-autoconfigure-2.5.2.jar 这个包下的 “META-INF/spring.factories”
这里使用webMvcAutoConfiguration来解读
@Configuration
是一个SpringBoot配置类,@ConditionalOnxxxx
是一个判断生效注解,如果其中的属性为true才会执行注解修饰的方法,@Bean
将对象注入到Spring容器中
启动类 有一个注解@springbootapplication注解
里面有一个@EnableAutoConfiguration注解
- @Import(AutoConfigurationImportSelector.class) 为核心,
- 找到候选的配置,getCandidateConfigurations
- 从META-INF/spring.factories中读取配置项 根据 自动配置注解EnableAutoConfiguration的全路径作为key 获取到对应的所有的自动配置类
- 由于使用了import注解 导入了自动配置类,就会自动的根据各种各样的条件进行自动的配置。数据交给spring容器管理
@springbootConfigration 标记类为配置类
@ComponentScan 组件扫描 默认扫描被修饰的类的所在的包以及子包
@EnableAutoConfiguration 启用自动的配置,启用自动配置的过程参考上边图和说明。