@SpringBootApplication
Spring Boot 的项目一般都会有注解 *Application标注的入口类,入口类中会有一个main方法,main方法是一个彼岸准的Java应用程序的入口方法,可以直接启动。
@SpringBootApplication注解是Spring Boot的核心注解,用此注解标注的入口类是应用的启动类,通常会在启动类的main方法中通过 SpringApplication.run(App.calss,args) 来启动Spring Boot应用项目。
@SpringBootApplication其实是一个组合注解,源代码如下:
程序清单:org/springframework/boot/autoconfigure/SpringBootApplication.java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {Class<?>[] exclude() default {};
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};}
@SpringBootApplication注解主要组合了以下注解:
(1)、@SpringBootConfiguration:这是 Spring Boot 项目的配置注解,也是一个组合注解,源码如下:
程序清单:org/springframework/boot/SpringBootConfiguration.java
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
在Spring Boot项目中推荐使用 @SpringBootConfiguration 注解来代替 @Configuration 注解。
(2)、@EnableAutoConfiguration:启动自动配置;该注解会让 Spring Boot 根据当前项目所依赖的jar包自动配置项目的相关配置项。
例如:当在 Spring Boot 项目的 pom.xml 文件中配置了如下 spring-boot-starter-web 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
项目就会自动添加Tomcat和SpringMVC的依赖,同时SpringBoot会对Tomcat和SpringMVC进行配置项的自动配置,打开pom.xml,选择Dependency Hierarchy 页面查看,如下图所示:
上图显示的是当前项目中SpringBoot的所有依赖,如果在项目中添加spring-boot-starter-data-jpa依赖,Spring Boot就会自动进行 spring-boot-starter-data-jpa 依赖的相关配置。(可自行添加依赖,进行观察)
(3)、@ComponentScan:扫描配置,Sping Boot 默认会扫描 @SpringBootApplicaiton 所在类的同级包以及它的子包,所以建议将 @SpringBootApplication 修饰的入口类放置在项目包下(Group Id + Artifact Id),这样做的好处是,可保证Spring Boot 项目自动扫描到项目所有的包。