应用在Springboot的启动类上:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.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 {
.....
}
是一个“三体”结构,重要的只有三个Annotation:
- @Configuration(在SpringBootConfiguration里面)
- 以JavaConfig形式的Spring IOC容器的配置类使用的那个@Configuration,所以这里的启动类标注了@Configuration之后,其本质也就是一个IOC容器的配置类
- @EnableAutoConfiguration
- 借助@import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器。
- 也是一个复合Annotation。
@ComponentScan
- 自动扫描并加载复合条件的组件或bean定义,最终将这些bean定义加载到容器中。
- 可以通过basePackages等属性指定@ComponentScan自动扫描的范围。
如果不指定,则默认Spring框架实现从声明@ComponentScan所在类的package开始扫描,默认情况是不指定的 ,所以Springboot的启动类最好放在root package下。
@EnableAutoConfiguration
内容:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
最关键的是:@Import(AutoConfigurationImportSelector.class)。
借助AutoConfigurationImportSelector类@EnableAutoConfiguration可以帮助Springboot应用将所有符合条件的@configuration都加载到当前Springboot创建并使用的IOC容器。@SpringBootApplication包含的方法
Class<?>[] exclude() default{};
//根据Class来排除特定的类加入spring容器,传入参数是class类型
String[] excludeName() default{};
//根据Class name排除特定的类加入spring容器,传入参数是class的全类名字符串数组
String[] scanBasePackages() default{};
//指定扫描包,参数是包名的字符串数组
Class<?>[] scanBasePackageClasses() default{};
//指定扫描包,参数是Class类型数组
@SpringBootApplication三个重要注解
- @Configuration
- 定义Spring IOC容器的配置类
- @EnableAutoConfiguration
- 从classpath中搜寻所有META/Spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应得配置项,也就是一个自动配置类列表加载到IOC容器中。
- @EnableAutoConfiguration让Springboot根据类路径下的jar包依赖为当前项目进行自动配置。
- 对于所有标注@Configuration的配置类,统一使用ConfigurationClassParser解析的。
- @ComponentScan
- 自动扫描并加载符合条件的组件或者bean定义。