其他分享
首页 > 其他分享> > SpringBoot学习笔记【尚硅谷】

SpringBoot学习笔记【尚硅谷】

作者:互联网

配置属性绑定

javaBean和配置文件绑定


第二种方式:在配置类中绑定javaBean和配置文件

自动配置原理

从@SpringBootApplication注解开始,它里面包括了三个注解:

先看一下第一个注解@SpringBootConfiguration,它里面其实就是一个@Configuration注解,表示这个类是配置类
再看一下@ComponentScan注解,就是扫描包
再看一下第三个注解,这个是自动配置的核心注解:@EnableAutoConfiguration
这个注解中有两点需要关注:

在AutoConfigurationPackage注解中,导入了Registrar.class,这个类中有一个批量注册的方法

        public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
            //仔细看一下这行代码,其实就是根据我们的启动类,找到启动类的包名,然后将这个包下面的所有的组件进行注册
            AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
        }

我们再来看一下@EnableAutoConfiguration中导入的AutoConfigurationImportSelector.class:

    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        } else {
            AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
            AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
            return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
        }
    }

我们再来看一下上面的getAutoConfigurationEntry方法,获取所有的自动配置的集合:

我们再来看一下上面调用的getCandidateConfigurations方法:
其实到这里已经有答案了,仔细看一下下面的注释:META-INF/spring.factories

    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;
    }

当然,也可以在往下跟一下:

我们可以在下面这个包找到相关内容:

标签:return,SpringBoot,一下,笔记,annotationMetadata,注解,硅谷,metadata,configurations
来源: https://www.cnblogs.com/tangliping/p/15134223.html