springboot自动配置原理
创建一个spingboot项目,在启动类可以看到configuration和enableAutoConfiguration这两个注解,注解表示该类为自动配置类和自动启动自动配置,enableAutoConfiguration 是利用AutoConfigurationImportSelecter给容器导入一些组件,可以查看public String[] selectImports(AnnotationMetadata annotationMetadata)方法的内容。通过protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories",然后把扫描到的这些文件包装成Properties对象然后从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中,整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中,每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来做自动配置每一个自动配置类进行自动配置功能,以HttpEncodingAutoConfiguration为例解释自动配置原理,根据当前不同的条件判断,决定这个配置是否生效。