springboot,是如何启动的
初探Springboot
springboot是如何启动的
主程序
//@SpringBootApplication :标注这个类是一个springboot应用
@SpringBootApplication
public class StudyApplication {
public static void main(String[] args) {
//将springboot应用启动
SpringApplication.run(StudyApplication.class, args);
}
}
注解
-
@SpringBootConfiguration :springboot的配置 @Configuration :spring 配置类 @Component:说明这也是一个spring的组件 @EnableAutoConfiguration :自动导入配置 ***重要*** @AutoConfigurationPackage :自动配置包 @Import(AutoConfigurationPackages.Registrar.class):自动配置'包注册' @Import(AutoConfigurationImportSelector.class):自动配置导入选择 getAutoConfigurationEntry(annotationMetadata);:获取配置实体 getCandidateConfigurations(annotationMetadata, attributes);:读取数据源 List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());:加载类 //@EnableAutoConfiguration protected Class<?> getSpringFactoriesLoaderFactoryClass() { return EnableAutoConfiguration.class; }其中 META-INF/spring.factories 是自动配置文件
![]()
其中包含了所有的自动配置
例如:
ingframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ @Configuration(proxyBeanMethods = false) //这两个注解是判断是否导入相关依赖,如果导入了就自动装配,否则就不会自动装配 @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) @ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory") @EnableConfigurationProperties(DataSourceProperties.class) @Import({ DataSourcePoolMetadataProvidersConfiguration.class,DataSourceInitializationConfiguration.class })
总结:springboot所有自动配置都是在启动的时候自动扫描并且加载;META-INF/spring.factories所有的自动配置类都在这个文件里面.但是不一定生效,要判断条件是否城里,只要导入了对应的start,就有对应的启动器了,有了启动器,我们的自动装配就会生效,就可以配置成功了!
补充:1.springboot在启动的时候,从类路径下META-INF/spring.factories获取指定的值;
2.将这些自动配置类导入容器,自动配置就会生效,帮我进行自动配置;
3.所有解决方案和自动配置的类都在\org\springframework\boot\spring-boot-autoconfigure\2.4.3\spring-boot-autoconfigure-2.4.3.jar 这个包中
4.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;


浙公网安备 33010602011771号