bootdefault和configuration_Spring Boot中@ImportAutoConfiguration注解与@Import和@EnableAutoConfiguration注解的...

Spring Boot中提供了一系列的注解比如@ImportAutoConfiguration和@EnableAutoConfiguration,它们最终都组合了@Import注解,那么,它们之间有什么区别呢?

@ImportAutoConfiguration是否可以替代@Import注解?@ImportAutoConfiguration和@EnableAutoConfiguration是否效果相同?

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

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

而@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 {};

}

公众号:程序新视界

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值