使用 @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)。