SpringBoot自动配置(@EnableAutoConfiguration)


一、介绍

  • @EnableAutoConfiguration和大多数@Ebable…注解一样,都是借助@Import将特定的Bean加载到IOC容器中
  • 属于SpringBoot,@SpringBootApplication就包含该注解
  • 项目启动会扫描所有的classpath下META-INF/spring.factories配置文件,将org.springframework.boot.autoconfigure.EnableAutoConfiguration
    EnableAutoConfiguration类的全限定名)的key对应的配置类(该类上必须存在@Configuration)放入IOC容器中;若没有该配置文件则默认扫描该注解所在类

二、属性

//是否开启自动配置,默认=true
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

//排除的类(class形式)
Class<?>[] exclude() default {};

//排除的类(字符串形式,类的全限定名)
String[] excludeName() default {};

三、执行流程

  • 包含@Import({AutoConfigurationImportSelector.class}),查看源码中的String[] selectImports(AnnotationMetadata annotationMetadata)方法就可得到该扫描的原理
    1. 读取spring.boot.enableautoconfiguration配置,如果没配置则返回true,如果为false则返回空数组String[] NO_IMPORTS = new String[0]
    2. 如果为true则扫描所有的classpath下META-INF/spring.factories配置文件,将文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration的key对应的字符串放入List<String>
    3. List<String>删除@EnableAutoConfiguration属性excludeexcludeName中排除的类
    4. List<String>转成String[],将String[]中的配置类加入到IOC容器中

四、与@ComponentScan的异同

  • 和@ComponentScan类似都是扫描带有@Component的类放入IOC容器中
  • @ComponentScan注解只能扫描到指定包范围内的Bean注册到IOC容器中(包含本项目、依赖),当依赖的Bean也需要注册到IOC容器中时,若包不在扫描范围内,还需要用户自己手动配置额外的扫描包的范围,通常我们需要引入的依赖是非常多的,这就要写非常多的扫描包范围,这对于用户来说非常不友好;此时需要借助@EnableAutoConfiguration+META-INF/spring.factories,这样用户引入依赖时无需关注依赖中的Bean扫描范围就会自动注册到IOC容器中;查看SpringBoot所需的依赖会发现有很多META-INF/spring.factories就是这样实现的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimi-001

只想在有限的时间分享更多的知识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值