SpringBoot项目入口函数类上的@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 {
/*
此处省略
*/
}
可见该注解上最重要的有三个注解
@SpringBootConfiguration:组合了@Configuration注解,配置该注解的类能够以 JavaConfig的方式完成配置,不再使用XML配置
@EnableAutoConfiguration:基于已添加的依赖项,SpringBoot的自动配置是一个应用程序启动时运行的过程,考虑了众多因素,才决定 Spring配置应该用哪个,不该用哪个
@ComponentScan:对Spring组件进行扫描,默认扫描所在类的同级类和同级目录下的所有类
其他注解
@Target(ElementType.TYPE):使注解只能用于描述类、接口(包括注解类型) 或enum声明 Class
@Retention(RetentionPolicy.RUNTIME):使注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
@Documented:使这个注解是由 javadoc记录的,在默认情况下也有类似的记录工具。 如果一个类型声明被注解了文档化,它的注解成为公共API的一部分
@Inherited:
> 使这个注解所修饰的类在类继承关系中,子类会继承父类使用的注解中被@Inherited修饰的注解;
> 使这个注解所修饰的接口继承关系中,子接口不会继承父接口中的任何注解,不管父接口中使用的注解有没有被@Inherited修饰;
> 使这个注解所修饰的类实现接口时不会继承任何接口中定义的注解