Spring Boot中ImportAutoConfiguration注解与Import注解的区别

2020年03月30日 15:49:13   [来源:互联网]   [阅读:-]
字体:【

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

}


推荐阅读:蜂鸟7


相关新闻
新闻焦点
距离今年中秋还有一周时间,截至8月31日,盒马推出的新口味现烤月饼已售出近200万只。“三文鱼芥末”、“梅干菜”、“奶黄流心”等新式口味已经超过[更多]
坦桑尼亚阿鲁沙地区,摄影师在当地国家公园发现了一只可爱的小猎豹,躲在汽车轮胎里和大家玩捉迷藏。坦桑尼亚阿鲁沙地区,摄影师在当地国家公园发现了一只[更多]
罗曼·罗兰说:“世界上只有一种英雄主义,就是认清生活的真相后依然热爱生活。”除了生活的真相,我们还需要认清人生的一些错觉。认清才能放下,放下才能[更多]
国旗的设计稿。新京报讯 9月5日,北京国际设计周主题展览《中华人民共和国成立初期国家形象设计展》在中华世纪坛艺术馆开幕。此次展览从设计的角度出发[更多]
关于我们 | 联系我们 | 老版地图 | 网站地图 | 版权声明
版权所有:赣财网未经授权禁止复制或建立镜像
相关作品的原创性、文中陈述文字以及内容数据庞杂本站无法一一核实,如果您发现本网站上有侵犯您的合法权益的内容,请联系我们,本网站将立即予以删除!
中国互联网违法和不良信息举报中心 网络警察报警岗亭