自动配置@EnableAutoConfiguration问题
作者:菜鸟的突变
自动配置@EnableAutoConfiguration
在spring中有很多Enable开头的注解,作用就是@Import来收集并注册特定的场景相关的bean,并且加入到IOC容器。
@EnableAutoConfiguration就是借助@Import来收集所有符合自动配置条件的bean定义,并加载到IOC容器中。
在这里可能会好奇的是为什么@SpringBootApplication必须跟业务包放在同一级路劲上,这里需要了解的一个注解是:@AutoConfigurationPackage
在Registrar.class类中
再项目启动加载的时候,都会去加载spring.factories,而这个文件再META-INF得目录下,通过这个文件可以加载到存放得相关得配置工厂类,这时候再springboot启动的时候,就会去加载自动配置核心注解@EnableAutoConfiguration, 这时候会去加载process方法后,加载spring.factories中的所有的工厂类,然后进程fiter过滤得到我们pom.xml配置的jar对应的配置工厂类加入到ioc容器中。
自动配置原理@EnableAutoConfiguration
解读SpringBoot自动配置原理
@EnableAutoConfiguration是一个复合Annotation,其是一下注解的组合
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { ... }
其中,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
借助于Spring框架原有的一个工具类:
SpringFactoriesLoader的支持,@EnableAutoConfiguration才能完成自动配置。
@EnableAutoConfiguration自动配置其实是:
从classpath中搜寻所有META-INF/spring.factories配置文件,并将其中org.spring-framework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过反射(Java Reflection)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。