为什么要有自动配置
软件从之前的整体,一步步拆分,已经形成了数量庞大的各类组件,比如web,各类数据库,中间层,日志,监控,邮
件,以及分布式组件以方便软件的灵活装配。随着个功能插件的拆分重新组合,以往的spring需要进行大量的配置文件来
装配组件。大部分的组件其配置过程是固定的,只有少部分是变化的,因此为方便开发,就有了springboot,以及默认优
于配置的设计理念。
自动配置原理
springBoot通过enableAutoConfigation注解开启自动配置,通过spring.factories文件配置的各种类名注册配置类,通过配置类上的Condition注解的条件,判断是否要实例化该配置类。如果从starters中或spring容器中获得condition中满足条件的类,就完成自动装配。
enableAutoConfig注解关键的源代码
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration{
String ENABLE_OVERRIDE_PROPERTY="spring.boot.enableautoconfigation";
}
enableAutoConfiguration注解的主要功能通过import导入的importSelector完成。@Import提供导入配置类的功能。
public String[] selectImports(AnnotationMetadata annotationMetadata){
//检查自动配置功能是否开启,默认为开启
if(!isEnabled(annotationMetadata)){
return NO_IMPORTS;
}
...
}