使用 @SpringBootApplication 注解
许多 Spring Boot 开发者喜欢让他们的应用使用自动配置和组件扫描,并且能够在他们的“应用类”上定义额外的配置。一个单独的 @SpringBootApplication 注解即可启用这三个特性,即:
-
@ComponentScan:在应用程序所在包上启用 @Component 扫描(参见 最佳实践)
-
@SpringBootConfiguration:允许在上下文中注册额外的 Bean 或导入其他配置类。这是 Spring 标准 @Configuration 的替代方案,有助于在集成测试中进行 配置检测。
- Java
- Kotlin
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
// same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
备注
@SpringBootApplication 还提供了别名,用于自定义 @EnableAutoConfiguration 和 @ComponentScan 的属性。
备注
这些特性都不是强制性的,你可以选择用该注解所启用的任意特性来替代这个单一注解。例如,你可能不希望在应用程序中使用组件扫描(component scan)或配置属性扫描(configuration properties scan):
- Java
- Kotlin
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Import;
@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ SomeConfiguration.class, AnotherConfiguration.class })
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
import org.springframework.boot.SpringBootConfiguration
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.docs.using.structuringyourcode.locatingthemainclass.MyApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Import
@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import(SomeConfiguration::class, AnotherConfiguration::class)
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
在此示例中,MyApplication 与其他 Spring Boot 应用程序并无不同,只是 @Component 注解的类和 @ConfigurationProperties 注解的类不会被自动检测,而是显式地导入了用户定义的 Bean(参见 @Import)。