主程序
// 本身是spring的一个组件
// 程序的主入口
// 标注这个类是springboot的应用
@SpringBootApplication
public class Demo012107Application {
// 将springBoot应用启动
public static void main(String[] args) {
SpringApplication.run(Demo012107Application.class, args);
}
}
注解:
@SpringBootApplication
:是一个组合注解@SpringBootConfiguration
:springboot的配置@Configuration
:spring配置类@Component
:spring组件
@EnableAutoConfiguration
:自动配置@AutoConfigurationPackage
:自动配置包@Import({AutoConfigurationImportSelector.class})
:导入选择器 包注册
@Import({AutoConfigurationImportSelector.class})
:自动配置导入包的核心AutoConfigurationImportSelector
:自动导入选择器getAutoConfigurationEntry();
:获得自动配置的实体;getCandidateConfigurations()
:获取候选的配置;
TODO //未完待续
@CompinetScan
:扫描当前启动类同级的包
// 获取所有的配置
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
获取候选的配置:
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
// 加载FactoryNames
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;}
@SpringBootApplication
→ @EnableAutoConfiguration
获取的方法加载的class,标记该类的所有包;
@SpringBootApplication
标记了这个包: EnableAutoConfiguration
META-INF/spring.factories
:spring的核心配置 导入所有配置类;
配置导入后,
将所有的资源加载到自动配置类里面:
Properties properties = PropertiesLoaderUtils.loadProperties(resource);