不要在不同配置类上多次使用@EnableAutoConfiguration

@EnableAutoConfiguration启动Spring的自动配置,但是如果在不同的配置类上同时使用,将导致自动配置的排除属性无效. 接下来从源码分析问题.

该注解上标记有@Import(AutoConfigurationImportSelector.class),作用其实就是解析Spring的spi文件spring.factories中key为“org.springframework.boot.autoconfigure.EnableAutoConfiguration”的自动配置内,将其注入到Spring的容器中,AutoConfigurationImportSelector实现了DeferredImportSelector接口,Spring会在类扫描完成后回调该接口,当回调到AutoConfigurationImportSelector实例时,会读取所有classpath中spring.factories文件中key为“...EnableAutoConfiguration”的自动配置类,存到集合中。但是如果@EnableAutoConfiguration中的exclude属性指定了具体排除的某个自动配置类,那么就会从集合中移除该自动配置类.

如果项目中不同配置类同时使用@EnableAutoConfiguration注解,就会被多次解析, 如果其中一个注解指定了exclude属性,而另一个没有指定exclude属性, 会导致第一处指定的exclude自动配置类,在第二处被加载进来。导致exclude属性指定失败。

如果两处配置都指定了相同的exclude属性,则完全是没有必要,他们达到的效果是完全一样的。

因此项目中只要有一处配置类上使用@EnableAutoConfiguration注解即可。而在SpringBoot的启动注解@SpringBootApplication上其实已经默认加了该注解,因此没有必要自己手动使用该注解。

当然在同一个配置类上,可以手动使用@EnableAutoConfiguration来覆盖@SpringBootApplication注解上的@EnableAutoConfiguration注解设置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值