使用 @SpringBootApplication 注解

许多 Spring Boot 开发人员希望他们的应用程序使用自动配置、组件扫描,并能够在其“应用程序类”上定义额外的配置。一个 @SpringBootApplication 注释可用于启用这三个功能,即

  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制

  • @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)。