Springboot注解与分析之:@SpringBootApplication
@SpringBootApplication(
exclude = {
JacksonAutoConfiguration.class,
WebMvcMetricsAutoConfiguration.class},
scanBasePackages = {
"com.optics.data"}
)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
按住Ctrl键并点击@SpringBootApplication注解,查看其源码
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.CUSTOM,
classes = {
TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {
AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {
};
@AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {
};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {
};
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class<?>[] scanBasePackageClasses() default {
};
}
由注解源码可以看出,@SpringBootApplication注解是一个复合注解,其中前面四个注解是Java元素,含义分别如下:
- @Target({ElementType.TYPE}):类、接口(包括注解类型)和enum声明
- @Retention(RetentionPolicy.RUNTIME):运行时注解
- @Documented:将注解添加到Java doc中
- @Inherited:允许继承
后面三个重要注解含义如下所示:
- @SpringBootConfiguration:Spring Boot配置注解
- @EnableAutoConfiguration:启用自动配置注解
- @ComponentScan:组件自动扫描注解
可以将@SpringBootApplication注解理解为:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合注解。
@SpringBootApplication注解含义:如果Application标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot会运行这个类的main方法来启动Spring Boot应用。