SpringBoot自动配置原理分析文章已经同步到GitHub开源项目:Java超神之路SpringBoot的主要宗旨是约定大于配置。在开发项目的前期,我们不需要做太多的配置,SpirngBoot已经为我们自动配置了大部分内容,比如仲裁依赖机制、自动引入所需依赖、自动配置等内容。让我们更关注业务逻辑,那么它是如何实现自动配置的呢?首先我们可以看到在SpringBoot的启动类上有一个@SpringBootApplication注解。接下来我们分析这个注解。点进去发现主要是由下面的注解组成。@SpringBootConfiguration//表示这是一个配置类@EnableAutoConfiguration@ComponentScan//我们一一分析包扫描规则。@SpringBootConfiguration点进去发现是一个Configuration@Configuration@Indexedpublic@interfaceSpringBootConfiguration{@AliasFor(annotation=Configuration.class)booleanproxyBeanMethods()defaulttrue;}我们在Spring中学习过这个注解,它代表当前一个配置类,所以在SpringBootApplication中标注的@SpringBootConfiguration注解是用来将这个启动类标注为配置类的。@ComponentScan我们从之前的Spring也知道,这个注解的意思是在注册IoC容器的时候,按照这个注解指定的方式进行包扫描,不用太担心。@EnableAutoConfiguration@AutoConfigurationPackage//通过主程序包名批量注册@Import(AutoConfigurationImportSelector.class)//public@interfaceEnableAutoConfiguration{StringENABLED_OVERRIDE_PROPERTY="spring.boot.enableautoconfiguration";类>[]排除()默认{};String[]excludeName()default{};}这个注解主要由两个注解组成。下面一一分析@AutoConfigurationPackage:自动配置包@Import(AutoConfigurationPackages.Registrar.class)//通过主程序包名批量注册public@interfaceAutoConfigurationPackage{String[]basePackages()default{};类>[]basePackageClasses()default{};}我们发现这个注解通过@Import(AutoConfigurationPackages.Registrar.class)将一个组件AutoConfigurationPackages.Registrar导入到IoC容器中。我们点进去发现这是由两个方法类组成的staticclassRegistrarimplementsImportBeanDefinitionRegistrar,DeterminableImports{@OverridepublicvoidregisterBeanDefinitions(AnnotationMetadatametadata,BeanDefinitionRegistryregistry){register(registry,newPackageImports(metadata).getPackageNames().toArray(新));String[0]}@OverridepublicSet