我看到一个Spring引导项目,该文件在文件中定义了@EnableAutoConfiguration,该方法类似于我见过的所有Spring Boot项目。但是我看到这个注释是在同一个项目中的其他java文件(包含Swagger配置的文件)中定义的。这个注释应该在多个文件中定义吗?这样做会有不良影响吗?
答案 0 :(得分:8)
@EnableAutoComfiguration
只能出现一次。
最简单的形式是,如果多次宣布会造成任何伤害,但没有任何好处。但是,如果您配置任何排除,则必须在每次出现注释时配置这些排除,因为它们不会累积。
答案 1 :(得分:1)
即使它允许有倍数@EnableAutoConfiguration
如果可能,我建议只有一个@EnableAutoConfiguration
。只是因为能够在一个地方排除您不需要的任何配置。否则可能会发生以下问题:
这是spring boot应用程序的主要配置:
@SpringBootApplication
@Import(value = {WebSecurityConfiguration.class})
public class Application {
public static void main(String... args) {
SpringApplication.run(Application.class, args);
}
}
这是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
}
}
所以,我希望为dev
个人资料禁用安全自动配置。但仅仅因为@SpringBootApplication
定义了@EnableAutoConfiguration
隐含的合适配置被扫描为“主要'已应用@EnableAutoConfiguration
和默认安全设置。因为dev
配置文件安全性已启用。
如果我将@EnableAutoConfiguration
定义为Application
类仅排除一次,则不会发生这种情况。