文章导航
简介
SpringBoot相较于Spring的一大进步就是它简化了配置。SpringBoot遵循”约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置。Springboot还提供了大量的starter,只需引入一个starter,就可以直接使用框架。
几个重要的注解
在SpringBoot启动类上添加的SpringBootApplication注解。这个注解实际上是一个复合注解。
1 | @Target(ElementType.TYPE) |
我们主要关注@SpringBootConfiguration,@EnableAutoConfiguration,@ComponeScan.@SpringBootConfiguration注解的底层是@Configuration注解,即支持JavaConfig的方式来进行配置。
@EnableAutoConfiguration注解的作用就是开启自动配置功能。
@ComponentScan注解的作用就是烧苗当前类所属的package,将@Controller、@Service、@Component、@Repository等注解所表示的类加载到IOC容器中。
通过对这几个注解的分析,我们可以知道自动配置工作主要是由EnableAutoConfiguration注解来实现的。
自动配置的关键:@EnableAutoConfiguration注解
该注解的定义如下:
1 | @Target(ElementType.TYPE) |
该注解使用@Import向IOC容器中注入了AutoConfigurationImportSelector类。
该类中提供了获取所有候选的配置的方法:
1 | protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { |
通过loadFactoryNames方法拿到了一个List,这个方法中传入了一个getSpringFactoriesLoaderFactoryClass(),这个方法,实际上就是获取了标记了@EnableAutoConfiguratioin注解的类。
1 | protected Class<?> getSpringFactoriesLoaderFactoryClass() { |
当我们的SpringBoot项目启动的时候,会先导入AutoConfigurationImportSelector,这个类会帮我们选择所有候选的配置,我们需要导入的配置都是SpringBoot帮我们写好的一个一个的配置类,那么这些配置类的位置,存在与META-INF/spring.factories文件中,通过这个文件,Spring可以找到这些配置类的位置,于是去加载其中的配置。
总结
- SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
- 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
- 它将所有需要导入的组件以全类名的方式返回 , 这些组件就会被添加到容器中 ;
- 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
- 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;





















