使用 @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 的属性。
备注
这些功能都不是强制性的,您可以选择用它所启用的任何功能来替换这个单一的注解。例如,您可能不想在应用程序中使用组件扫描或配置属性扫描:
- 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)。