在跑springboot项目的时候,对于启动main函数的类配置经常会有@SpringBootConfiguration注解,那到底@SpringBootConfiguration是什么意思?
/**
* Spring Boot核心注解,用于开启自动配置。可以解决根类或者配置类
* 一个@SpringbootApplication相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值
* */
@SpringBootApplication
public class PageController {
public static void main(String[] args) {
SpringApplication.run(PageController.class, args);
}
}
或许你会对上面代码的注解感到很疑惑,那么我们跟到@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, attribute = "exclude")
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
@Target(ElementType.TYPE)、@Retention(RetentionPolicy.RUNTIME)、@Documented、@Inherited这四个注解是基本配置,这里不详述。
可以看到这里多了三个注解@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
@SpringBootConfiguration:相当于@Configuration,就是java配置bean容器
@EnableAutoConfiguration:启用 Spring 应用程序上下文的自动配置,
@ComponentScan:组件自动配置
1.可以试验
@SpringBootApplication
public class PageController {
public static void main(String[] args) {
SpringApplication.run(PageController.class, args);
}
}
项目可以跑起来
2.注解掉@SpringBootApplication,
//@SpringBootApplication
public class PageController {
public static void main(String[] args) {
SpringApplication.run(PageController.class, args);
}
}
项目跑不起来
3.改@SpringBootApplication 成 @Configuration,@EnableAutoConfiguration,
@ComponentScan
@RestController
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class PageController {
public static void main(String[] args) {
SpringApplication.run(PageController.class, args);
}
}
项目可以跑起来、
可以得出结论:
@SpringBootApplication注解等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan