简单分析SpringApplication.run的启动(2)

242 阅读1分钟

注解@SpringBootApplication解释

@SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
// spring-context下的annotation 用来扫描对应指定的类
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

官方解释
表示类提供Spring Boot应用程序@Configuration。 可以用作Spring标准@Configuration注释的替代方法,以便可以自动找到配置。 应用程序应该只包含一个@SpringBootConfiguration,大多数惯用的Spring Boot应用程序将从@SpringBootApplication继承它。

@EnableAutoConfiguration

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

官方解释
启用S​​pring Application Context的自动配置,尝试猜测和配置需要的bean。自动配置类通常基于类路径以及定义的bean。使用@EnableAutoConfiguration注释的类的包(通常通过@SpringBootApplication)具有特定的意义,通常用作“默认”。例如,在扫描@Entity类时将使用它。通常建议您在根包中放置@EnableAutoConfiguration,以便可以搜索所有子包和类。 自动配置类是常规的Spring配置bean。它们使用SpringFactoriesLoader机制定位(键入此类)。通常,自动配置bean是@Conditional bean(最常使用@ConditionalOnClass@ConditionalOnMissingBean注释)。

@AutoConfigurationPackage

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

官方解释
指示包含带注释的类的包应使用AutoConfigurationPackages注册。

AutoConfigurationImportSelector

public class AutoConfigurationImportSelector
	implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware,
	BeanFactoryAware, EnvironmentAware, Ordered

其中接口DeferredImportSelectorspring-context下的annotation定义
public interface DeferredImportSelector extends ImportSelector
其中@import表示要导入的一个或多个@Configuration类。 表示在@EnableAutoConfiguration中导入了处理类AutoConfigurationImportSelector来处理被@EnableAutoConfiguration修饰的类。

@SpringBootConfiguration

主要用来标识使用@SpringBootApplication