• 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:

  • 相关阅读:
    selenium爬取沃尔玛分类和商品详情
    linux下部署redis
    linux系统基本操作命令
    Scrapy & Django项目
    爬虫爬取百度搜狗图片持久化存储
    django + vue 简单配置登录注册及分页和实例化
    vue安装及常用属性
    vue跨域配制
    Django中配置全文检索
    Django框架知识点简单总结(1)
  • 原文地址:https://www.cnblogs.com/tangliping/p/15134223.html
Copyright © 2020-2023  润新知