@ImportAutoConfiguration 和 @Import 有什么区别

问题描述 投票:0回答:2

org.springframework.boot.autoconfigure.ImportAutoConfiguration
是否是
org.springframework.context.annotation.Import
的改进替代品,因为它具有相同的作用并且另外尊重

@AutoConfigureBefore
@AutoConfigureAfter
@AutoConfigureOrder

spring-boot spring-java-config
2个回答
10
投票

这是真的吗

org.springframework.boot.autoconfigure.ImportAutoConfiguration
是 改进的替代品
org.springframework.context.annotation.Import

不,它不是替代品,因为

@ImportAutoConfiguration
是 Spring Boot 特定的注释,我可能将其称为增强。但是,尽管在使用 Spring Boot 时似乎可以互换使用它们,但我不建议这样做。按照预期用途使用它们。


当您不想使用
@ImportAutoConfiguration
启用默认自动配置时,可以使用
@EnableAutoConfiguration
。您可能知道,
@EnableAutoConfiguration
尝试配置位于类路径上的 bean,例如 tomcat-embedded.jar。而
@ImportAutoConfiguration
仅运行您在注释中提供的配置类。

这是一个带有

@ImportAutoConfiguration
:

的 Spring Boot 应用程序 main 方法的示例
@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);
  }
}

您可能会说这是使用

@EnableAutoConfiguration
的替代方案。在本例中配置准系统嵌入式 Tomcat 和 Spring WebMVC。


@Import
用于导入标有
@Configuration
的 bean 配置类,其中包含您的自定义 bean 配置。


0
投票

您检查过这两个注释的源代码吗?接口定义已经揭示了它们的相似之处和不同之处。截至今天,

@Import
注释的定义如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
    Class<?>[] value();
}

@ImportAutoConfiguration
注释的定义如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ImportAutoConfigurationImportSelector.class})
public @interface ImportAutoConfiguration {
    @AliasFor("classes")
    Class<?>[] value() default {};

    @AliasFor("value")
    Class<?>[] classes() default {};

    Class<?>[] exclude() default {};
}

正如您所看到的,它们有很多共同点。但是,

@ImportAutoConfiguration
注释还有一个
value
的别名,称为
classes
。此外,它还支持
exclude
类的属性。

另请注意

@Import
类的附加
ImportAutoConfigurationImportSelector

© www.soinside.com 2019 - 2024. All rights reserved.