一、什么是自动配置
SpringBoot的自动配置就是当spring容器启动后,一些自动配置类(只是自动配置类,并不是当前组件配置到IOC容器当中,自动配置类通过@Conditional注解来按需配置)就自动装配的IOC容器中,不需要我们手动去注入,从而简化了开发,省去了繁琐的配置。
二、SpringBoot自动配置原理
Spring Boot的启动类上有一个@SpringBootApplication注解,这个注解是SpringBoot实现自动配置必不可少的注解。接着我们来看一下这个注解的详细作用。
当我们进去到 @SpringBootApplication 注解的源码当中,可以发现它是一个复合注解,它是由 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan 这三个注解组成。
①@ComponentScan 注解:
这个注解在Spring中很重要 ,它对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
②@SpringBootConfiguration
作用:SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
我们来看一下这个注解的内部:
③@EnableAutoConfiguration开启自动配置功能
以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 ;@EnableAutoConfiguration:告诉SpringBoot开启自动配置功能,这样自动配置才能生效;
而@EnableAutoConfiguration注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类。而@Import(AutoConfigurationImportSelector.class)注解的作用就是给容器中导入组件。
总结:
在启动类的run方法传入启动类的class(方便后面获取其注解信息)。执行run方法,创建SpringApplication对象,并用LoadSpringFactories()方法将/META-INF/spring.factories文件里的k-v读入缓存(方便后面加载时使用)。然后继续run方法,在某处会获取传入的启动类的class,并解析上面的注解,当解析到@Import({AutoConfigurationImportSelector.class})时会将AutoConfigurationImportSelector加载进方法区,通过反射创建对象,调用其某一个方法,从缓存读取前面存储的k-v,并经过一系列的过滤、去重等,最后将需要的配置类加载,生成BD对象,创建Bean对象,放入spring容器。