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.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;

posted @ 2021-03-05 16:30  马莱狙神  阅读(139)  评论(0)    收藏  举报