Spring-Boot 学习(一)

@SpringBootApplication //主程序类
@ComponentScan(basePackages = {"com.example.demo"})
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

@SpringBootApplication:标注该类为spring boot主程序类

@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:表示boot的配置类(spring boot的)

  @Configuration:同样也是标注为配置类(spring的)

@EnableAutoConfiguration:开启自动配置功能:

  以前我们需要配置的东西,现在spring boot帮我们自动配置:@EnableAutoConfiguration告诉spring boot开启自动配置功能;这样才能生效

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

@AutoConfigurationPackage:自动配置包

  @Import(AutoConfigurationPackages.Registrar.class)

  spring的底层注解@Import,给容器导入一个组件()

  AutoConfigurationPackages.Registrar.class:是将@SpringBootConfiguration 标注的类所在的包下的子包里面所有的组建扫描到spring容器中。

  @Import(AutoConfigurationImportSelector.class):导入组件;

   将所有需要导入的组件以全类名的方式返回:这些组件就会被添加到容器中

	@Override
	public String[] selectImports(AnnotationMetadata annotationMetadata) {
		if (!isEnabled(annotationMetadata)) {
			return NO_IMPORTS;
		}
		AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
				.loadMetadata(this.beanClassLoader);
		AnnotationAttributes attributes = getAttributes(annotationMetadata);
		List<String> configurations = getCandidateConfigurations(annotationMetadata,
				attributes);
		configurations = removeDuplicates(configurations);
		Set<String> exclusions = getExclusions(annotationMetadata, attributes);
		checkExcludedClasses(configurations, exclusions);
		configurations.removeAll(exclusions);
		configurations = filter(configurations, autoConfigurationMetadata);
		fireAutoConfigurationImportEvents(configurations, exclusions);
		return StringUtils.toStringArray(configurations);
	}

configurations:里面存储的数组信息就是需要spring自动配置的全类名。(XXX.AutoConfiguration)。

有了自动配置类,免去了我们自己编写配置注入的工作,非常的简便

getCandidateConfigurations:主要是调用了SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());这个方法。其中第一个参数为                           EnableAutoConfiguration.class,第二个参数为beanClassLoader。其作用为从我们类路径下的META-INF/spring.factories文件中获取EnableAutoConfiguration指定的                                  值。

猜你喜欢

转载自www.cnblogs.com/wuzhenzhao/p/9150158.html