spring - 何时使用 @ImportAutoConfiguration 与 @Import

标签 spring spring-boot

我对何时使用一个与另一个的文档不是很清楚。从我尝试过的事情来看,他们似乎都有相同的行为。具体有什么区别?

最佳答案

基本上, @导入 注释导入一个或多个 @配置类,这些类可以声明一个或多个 @ bean 方法。

鉴于, @ImportAutoConfiguration 注释导入并应用指定的自动配置类。

More detailed comparison over @Import and @ImportAutoConfiguration



@进口
  • 指示要导入的一个或多个组件类——通常是 @Configuration 类。
  • 这是来自 spring-context 的注释模块
  • 一个简单的例子,假设你有这些配置类,

    用户配置
    @Configuration
    public class UserConfig {
    
        @Bean(name="user")
        public User userConfigure(){                
            return new User();              
        }
    }
    

    调度器配置
    @Configuration
    public class SchedulerConfig {
    
        @Bean(name="scheduler")
        public Schedule cheduleConfigure(){             
            return new Schedule();              
        }
    }
    

    应用配置

    使用 @Import 注解导入这些配置类
    @Configuration
    @Import({ UserConfig.class, SchedulerConfig.class })
    public class AppConfig {
    
    }
    

  • @ImportAutoConfiguration
  • 导入并应用指定的auto-configuration classes .
  • 它是 spring-boot-autoconfigure 模块的注解。
  • 它代表了一种基于类路径中存在的依赖项自动配置 Spring 应用程序的方法。
  • 因为它来自 spring-boot模块 - 您只能在 Spring-Boot applications 中使用此注解
  • 它在编写测试时尤其有用。
  • 一个简单的例子,

    与@Import 部分一样,我们也需要在这里创建使用@Configuration 注释的类。与上面的 @Import 示例不同,您可以使用不同的 org.springframework.boot.autoconfigure.condition s(ConditionalOnProperty、ConditionalOnResource、ConditionalOnBean、ConditionalOnMissingBean 等)在您的auto-configuration类(class)。
    @Configuration
    @ConditionalOnProperty(prefix = "my.data.base.config", name = "enable", havingValue = "true")
    public class DataAutoConfiguration {
    
        @Bean
        @ConfigurationProperties(prefix = "my.data.base")
        public DataService dataService() {
            return new DataService();
        }
    }
    

    使用 @ImportAutoConfiguration 注解导入自动配置
    @Configuration
    @ImportAutoConfiguration(DataAutoConfiguration.class)
    public class MyDatabaseAutoconfiguration {
        //...
    }
    

    现在您需要在 resources/META-INF/spring.factories 注册它文件,
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.your.package.autoconfiguration.MyDatabaseAutoconfiguration
    

    要启用自动配置,我们可以使用 之一@SpringBootApplication @EnableAutoConfiguration 注解
    @SpringBootApplication
    public class AutoconfigurationApplication {
        public static void main(String[] args) {
            SpringApplication.run(AutoconfigurationApplication.class, args);
        }
    }
    

  • 更多引用资料
  • ConditionalOnProperty
  • ConditionalOnResource
  • ConditionalOnBean
  • ConditionalOnMissingBean
  • spring-boot-custom-auto-configuration
  • using-boot-auto-configuration
  • 关于spring - 何时使用 @ImportAutoConfiguration 与 @Import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444679/

    相关文章:

    java - AspectJ 切入点表达式匹配任意位置的参数注释

    java - 为什么我的 doFilterInternal 方法没有被调用?

    java - 无法使用 mongodb react 测试功能端点

    java - Spring/JAVA连续进程同步

    spring-boot - 打印 Spring 引导横幅后如何将终端颜色恢复为默认值

    java - 为什么 Maven 获取错误的 Jetty 版本?

    Java 1.8u20 无法启动 spring boot 和 groovy 2.3.7

    java - 是否可以使用 @RequestParam 从 JSON 转换为域对象

    gradle - 将自定义JVM参数添加到Spring Boot生成的bat/sh脚本

    java - spring-data-rest 集成测试因简单的 json 请求而失败