具有@EnableAutoConfiguration批注的多个文件

时间:2015-08-28 22:17:02

标签: java spring spring-boot

我看到一个Spring引导项目,该文件在文件中定义了@EnableAutoConfiguration,该方法类似于我见过的所有Spring Boot项目。但是我看到这个注释是在同一个项目中的其他java文件(包含Swagger配置的文件)中定义的。这个注释应该在多个文件中定义吗?这样做会有不良影响吗?

2 个答案:

答案 0 :(得分:8)

@EnableAutoComfiguration只能出现一次。

最简单的形式是,如果多次宣布会造成任何伤害,但没有任何好处。但是,如果您配置任何排除,则必须在每次出现注释时配置这些排除,因为它们不会累积。

答案 1 :(得分:1)

即使它允许有倍数@EnableAutoConfiguration如果可能,我建议只有一个@EnableAutoConfiguration。只是因为能够在一个地方排除您不需要的任何配置。否则可能会发生以下问题:

  1. 这是spring boot应用程序的主要配置:

    @SpringBootApplication
    @Import(value = {WebSecurityConfiguration.class})
    public class Application {
        public static void main(String... args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
  2. 这是WebSecurityConfiguration

    的内容
    @Configuration
    public class WebSecurityConfiguration {
            @Configuration
            @EnableAutoConfiguration(exclude ={SecurityAutoConfiguration.class,
            SpringBootWebSecurityConfiguration.class})
            @Profile("dev")
            protected static class DefaultWebSecurityConfig {
            }
    
            @Configuration
            @EnableAutoConfiguration
            @EnableWebSecurity
            protected static class LocalWebSecurityConfig extends WebSecurityConfigurerAdapter {
                //implementation 
            }
    }
    
  3. 所以,我希望为dev个人资料禁用安全自动配置。但仅仅因为@SpringBootApplication定义了@EnableAutoConfiguration隐含的合适配置被扫描为“主要'已应用@EnableAutoConfiguration和默认安全设置。因为dev配置文件安全性已启用。

    如果我将@EnableAutoConfiguration定义为Application类仅排除一次,则不会发生这种情况。