Spring boot容器导入组件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/82048870

@Import

向容器中,导入组件

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

EnableAutoConfigurationImportSelector.class

点击,进入
自动配置导包选择器

@Deprecated
public class EnableAutoConfigurationImportSelector extends AutoConfigurationImportSelector {

AutoConfigurationImportSelector

点击,进入

public String[] selectImports(AnnotationMetadata annotationMetadata) {
    if(!this.isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    } else {
        try {
            AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
            AnnotationAttributes attributes = this.getAttributes(annotationMetadata);
            List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
            configurations = this.removeDuplicates(configurations);
            configurations = this.sort(configurations, autoConfigurationMetadata);
            Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);
            this.checkExcludedClasses(configurations, exclusions);
            configurations.removeAll(exclusions);
            configurations = this.filter(configurations, autoConfigurationMetadata);
            this.fireAutoConfigurationImportEvents(configurations, exclusions);
            return (String[])configurations.toArray(new String[configurations.size()]);
        } catch (IOException var6) {
            throw new IllegalStateException(var6);
        }
    }
}

selectImports

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

Configurations

容器,需要导入的组件
给容器中导入非常多的自动配置类xxxAutoConfiguration
就是,给容器中导入这个场景需要的所有组件,并配置好这些组件
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作

getCandidateConfigurations(annotationMetadata, attributes)
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
    List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
    Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
    return configurations;
}
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

配置文件位置

这里写图片描述

文件内容

这里写图片描述
Spring Boot
在启动的时候,从类路径下的META-INF/spring.factories中
获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中
自动配置类就生效,帮我们进行自动配置工作

J2EE的整体整合解决方案和自动配置都在

spring-boot-autoconfigure-1.5.9.RELEASE.jar

这里写图片描述

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/82048870