@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 {
}

@SpringBootApplication注解是一个组合注解,其中包括:@SpringBootConfiguration、@EnableAutoCOnfiguration、@ComponentScan

 

@SpringBootConfiguration继承自@Configuration,二者功能一致,标注当前类是配置类,并会将当前类内声名的以@Bean注解标注的方法实例纳入Spring容器中,实例名就是方法名。

@ComponentScan的作用是自动扫描并加载符合条件的的组件或Bean定义,最终将这些Bean加载到容器中。我们可以通过basePackages属性指定扫描的范围,如果不指定,默认扫描当前包及其子包下面的类。

@EnableAutoConfiguration是借助@Import将所有符合自动配置条件的Bean加载到IOC容器。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

其中,最关键的是@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector这个类,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration都加载IOC容器中,从classpath中搜寻出所有的META/Spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置项,也就是一个自动配置类列表加载到IOC容器。

简单说,@EnableAutoConfiguration注解让SpringBoot根据类路径下的jar包依赖为当前项目进行自动配置,例如添加spring-boot-starter-web依赖,会自动添加Tomcat和SpringMVC依赖。对于所有使用@Configuration标注的配置类,统一由ConfigurationClassParser解析。

你可能感兴趣的:(SpringBoot)