许多Spring Boot开发人员喜欢他们的应用程序使用自动配置、组件扫描,并可以在他们的“应用程序类”上定义额外的配置,能够使用一个@SpringBootApplication
注解来启用这三个特性:spring
@EnableAutoConfiguration
:启用Spring Boot的自动配置机制 @ComponentScan
:在应用程序所在的包上启用@Component
扫描(参见最佳实践)@Configuration
:容许在上下文中注册额外的bean或导入额外的配置类@SpringBootApplication
注解与使用@Configuration
、@EnableAutoConfiguration
和@ComponentScan
的默认属性等效,以下例所示:segmentfault
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication
还提供别名来定制@EnableAutoConfiguration
和@ComponentScan的属性。
这些特性都不是强制性的,你能够选择用它所支持的任何特性来替换这个注解,例如,你可能不想在应用程序中使用组件扫描:
package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @EnableAutoConfiguration @Import({ MyConfig.class, MyAnotherConfig.class }) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
在本例中,Application
和其余Spring Boot应用程序同样,只是没有自动检测到@component
- 注解类,而用户定义的bean是显式导入的(参见@Import
)。app