@ImportAutoConfiguration 和 @EnableAutoConfiguration 注解的区别

Spring Boot中提供了一系列的注解比如@ImportAutoConfiguration和@EnableAutoConfiguration,它们最终都组合了@Import注解。

从根本上来说,@ImportAutoConfiguration是@Import的增强,限制了它使用的特定范围。

使用@EnableAutoConfiguration时会扫描整个类路径下,包括依赖引入的jar包所有的自动配置类(被注解了@Configuration的类),尝试进行自动配置。

而@ImportAutoConfiguration只运行在你注解中提供的配置类。

下面是一个Spring Boot入口方法中使用@ImportAutoConfiguration的列子:

@ComponentScan("path.to.your.controllers")
@ImportAutoConfiguration({WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class,EmbeddedServletContainerAutoConfiguration.class, ServerPropertiesAutoConfiguration.class,HttpMessageConvertersAutoConfiguration.class})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

所以说,更准确的来说,@ImportAutoConfiguration与@EnableAutoConfiguration的功能更相似,而且能够更细粒度的控制导入的类。

@ImportAutoConfiguration在单元测试中也有应用场景,比如@AutoConfigureMockMvc注解便组合了@ImportAutoConfiguration。

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration
@PropertyMapping("spring.test.mockmvc")
public @interface AutoConfigureMockMvc {
    // ...
}

这样,在单元测试的过程中既实现了自动配置的功能,又不必像@EnableAutoConfiguration那样扫描并尝试自动配置所有的自动配置类。

@ImportAutoConfiguration相关源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(ImportAutoConfigurationImportSelector.class)
public @interface ImportAutoConfiguration {
    /**
    * 导入的自动配置类
    */
    @AliasFor("classes")
    Class>[] value() default {};
    /**
    * 导入的自动配置类。如果为空,则使用META-INF/spring.factories中指定的类,其中key为带注解的类的全限定名称。
    */
    @AliasFor("value")
    Class>[] classes() default {};
    /**
    * 排除自动配置类
    */
    Class>[] exclude() default {};
}

————————————————
版权声明:本文为CSDN博主「weixin_39726131」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39726131/article/details/111923198

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值