SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的。@EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryNames(),将 autoconfig 包里的已经写好的自动配置加载进来。@Conditional 条件注解,通过判断类路径下有没有相应配置的 jar 包来确定是否加载和自动配置这个类。@EnableConfigurationProperties 的作用就是,给自动配置提供具体的配置参数,只需要写在 application.properties 中,就可以通过映射写入配置类的 POJO 属性中。
@EnableAutoConfiguration
@Enable*注释并不是SpringBoot新发明的注释,Spring 3框架就引入了这些注释,用这些注释替代XML配置文件。比如:@EnableTransactionManagement注释,它能够声明事务管理@EnableWebMvc注释,它能启用Spring MVC@EnableScheduling注释,它可以初始化一个调度器。
这些注释事实上都是简单的配置,通过@Import注释导入。
从启动类的@SpringBootApplication进入,在里面找到了@EnableAutoConfiguration,
@EnableAutoConfiguration里通过@Import导入了EnableAutoConfigurationImportSelector,
进入他的父类AutoConfigurationImportSelector
找到selectImports()方法,他调用了getCan