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