java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 自动配置@EnableAutoConfiguration

自动配置@EnableAutoConfiguration问题

作者:菜鸟的突变

这篇文章主要介绍了自动配置@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容器。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文