何时使用 @ImportAutoConfiguration 与 @Import

chi*_*fet 9 spring spring-boot

我对文档不太清楚何时使用其中一种或另一种。从我尝试过的事情来看,他们似乎都有相同的行为。到底有什么区别?

She*_*Rai 6

基本上,@Import注释导入一个或多个@Configuration类,并且这些类可以声明一个或多个@Bean方法。

\n\n

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

\n\n
\n

对@Import@ImportAutoConfiguration进行更详细的比较

\n
\n\n

@进口

\n\n
    \n
  • 指示要导入 \xe2\x80\x94 的一个或多个组件类(通常是 @Configuration 类)。
  • \n
  • 这是spring-context模块的注释
  • \n
  • 一个简单的例子,假设你有这些配置类,

    \n\n

    用户配置

    \n\n
    @Configuration\npublic class UserConfig {\n\n    @Bean(name="user")\n    public User userConfigure(){                \n        return new User();              \n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    调度程序配置

    \n\n
    @Configuration\npublic class SchedulerConfig {\n\n    @Bean(name="scheduler")\n    public Schedule cheduleConfigure(){             \n        return new Schedule();              \n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    应用程序配置

    \n\n

    使用@Import注释导入这些配置类

    \n\n
    @Configuration\n@Import({ UserConfig.class, SchedulerConfig.class })\npublic class AppConfig {\n\n}\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
\n\n

@导入自动配置

\n\n
    \n
  • 导入并应用指定的自动配置类
  • \n
  • 这是来自 spring-boot-autoconfigure 模块的注释。
  • \n
  • 它代表了一种根据类路径上存在的依赖关系自动配置 Spring 应用程序的方法。
  • \n
  • 由于它来自spring-boot模块 - 您只能在以下位置使用此注释Spring-Boot applications
  • \n
  • 它在编写测试时尤其有用。
  • \n
  • 一个简单的例子,

    \n\n

    与@Import部分一样,我们也需要在这里创建用@Configuration注释的类。与上面的 @Import 示例不同,您可以在类org.springframework.boot.autoconfigure.condition上使用不同的 s(ConditionalOnProperty、ConditionalOnResource、ConditionalOnBean、ConditionalOnMissingBean 等)auto-configuration

    \n\n
    @Configuration\n@ConditionalOnProperty(prefix = "my.data.base.config", name = "enable", havingValue = "true")\npublic class DataAutoConfiguration {\n\n    @Bean\n    @ConfigurationProperties(prefix = "my.data.base")\n    public DataService dataService() {\n        return new DataService();\n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    使用@ImportAutoConfiguration注释导入自动配置

    \n\n
    @Configuration\n@ImportAutoConfiguration(DataAutoConfiguration.class)\npublic class MyDatabaseAutoconfiguration {\n    //...\n}\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    现在您需要将其注册到resources/META-INF/spring.factories文件中,

    \n\n
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.your.package.autoconfiguration.MyDatabaseAutoconfiguration\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    要启用自动配置,我们可以使用@SpringBootApplication@EnableAutoConfiguration 注解之一

    \n\n
    @SpringBootApplication\npublic class AutoconfigurationApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(AutoconfigurationApplication.class, args);\n    }\n}\n
    Run Code Online (Sandbox Code Playgroud)
  • \n
\n\n

更多参考

\n\n\n