zoukankan      html  css  js  c++  java
  • 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;
        }
    

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

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

    我们先来随便看一个自动配置类吧,看一下DispatchServlet:

  • 相关阅读:
    c# 虚拟路径转换为绝对路径
    Java基础——封装
    作为测试人,如何优雅的查看Log日志?
    学习整理
    记一次DataNode慢启动问题
    记一次DataNode慢启动问题
    记一次DataNode慢启动问题
    DataNode迁移方案
    C++学习笔记-模板
    C Primer Plus之指针
  • 原文地址:https://www.cnblogs.com/tangliping/p/15134223.html
Copyright © 2011-2022 走看看