自动配置@EnableAutoConfiguration问题

 更新时间:2023年06月01日 09:18:21   作者:菜鸟的突变  
这篇文章主要介绍了自动配置@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容器。

总结

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

相关文章

  • Java生产1-100的随机数简单实例(分享)

    Java生产1-100的随机数简单实例(分享)

    下面小编就为大家带来一篇Java生产1-100的随机数简单实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 详解Spring Boot 打包分离依赖JAR 和配置文件

    详解Spring Boot 打包分离依赖JAR 和配置文件

    这篇文章主要介绍了Spring Boot 打包分离依赖JAR 和配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java线程池ThreadPoolExecutor源码深入分析

    Java线程池ThreadPoolExecutor源码深入分析

    ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务
    2022-08-08
  • SpringBoot整合Jasypt实现配置加密的步骤详解

    SpringBoot整合Jasypt实现配置加密的步骤详解

    Jasypt是一个Java库,提供了一种简单的加密解密方式,可用于保护敏感数据,例如密码、API密钥和数据库连接信息等,本文给大家介绍了SpringBoot整合Jasypt实现配置加密的详细步骤,感兴趣的同学可以参考一下
    2023-11-11
  • java实现砸金蛋抽奖功能

    java实现砸金蛋抽奖功能

    这篇文章主要为大家详细介绍了java实现砸金蛋抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 详谈jvm--Java中init和clinit的区别

    详谈jvm--Java中init和clinit的区别

    下面小编就为大家带来一篇详谈jvm--Java中init和clinit的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java日常练习题,每天进步一点点(16)

    Java日常练习题,每天进步一点点(16)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java与Node.js利用AES加密解密出相同结果的方法示例

    Java与Node.js利用AES加密解密出相同结果的方法示例

    这篇文章主要介绍了Java与Node.js利用AES加密解密出相同结果的方法,文中给出了详细的示例代码,相信对大家的学习或者工作能带来一定的帮助,需要的朋友们下面来一起看看吧。
    2017-02-02
  • SpringBoot自动配置Quartz的实现步骤

    SpringBoot自动配置Quartz的实现步骤

    本文主要介绍了SpringBoot自动配置Quartz的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • maven异常Invalid bound statement(not found)的问题解决

    maven异常Invalid bound statement(not found)的问题解决

    本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12

最新评论