springboot源码学习(跟视频)


底层注解-@ConfigurationProperties配置绑定

@ConfigurationProperties(prefix = “manager”)
在这里插入图片描述

@EnableConfigurationProperties(Manager.class)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

springboot自动配置的原理

@SpringBootApplication

在这里插入图片描述

@SpringBootConfiguration

在这里插入图片描述

@ComponentScan

包扫描

@EnableAutoConfiguration

在这里插入图片描述

@AutoConfigurationPackage 自动配置包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述利用registrar给容器中导入一系列的组件

打个断点,debug启动

在这里插入图片描述
在这里插入图片描述

 public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
            AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));
        }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动配置包的总结

以上步骤的原理:就是通过注解 获取 主方法类的 所在的包名
将包名放到一个字符串数组中,进行注册。

所以,@AutoConfigurationPackage 注解,批量注册该包下的所有组件。
我认为是自定义的组件。

在这里插入图片描述
在这里插入图片描述

@AutoConfigurationPackage注解,通过一系列的注解套娃,获得了 主配置类所在的包,对该包下的所有(自定义的组件进行注册)。

也就说明了,没有在 主配置类 所在的包及其子包中,是无法注册到容器中的。

@Import({AutoConfigurationImportSelector.class}) 注解

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过了这个方法,130个配置类的全类名的字符串给获取到了。

 List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

这个方法,是按照什么规则,来进行获取到的。

在这里插入图片描述
在这里插入图片描述
进入方法里面进行查看:
在这里插入图片描述

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

点击去
在这里插入图片描述
点进去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类加载器默认加载当前系统里面所有 META-INF/spring.factories 位置的文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特别是这个 spring-boot-autoconfugure 这个包 是 核心配置包

我发现:

就 spring-boot-autoconfugure这个jar包中有这个META-INF/spring.factories 文件。而其他的与springboot配置无关的jar包里面没有。

在这里插入图片描述
因为 我导入了:
在这里插入图片描述
所以,之前的导入的集合中就有130个。

问题:

为什么读取的是
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
下的文件内容?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在配置文件写死了,已启动springboot就加载的配置类。(还需要进行按需加载)

虽然进行了加载这些配置类,但是会通过@Condition的一系列的注解进行筛选。

在这里插入图片描述

在这里插入图片描述

总结

AutoConfigurationImportSelector.class 是通过 类加载器加载 所有jar包所在的META-INF/spring.factories 的文件,一般跟springboot配置相关的jar包才有这个文件。

然后读取,通过@Condition的一系列的注解 进行过滤后,再进行加载进入内存。

成功读取到的 ***autoConfigura的类,这个类中有一系列的组件。
类和其中的组件都是由@Condition的一系列的注解 进行按需加载的。


静态资源配置原理

静态资源是属于web场景的。一加载springboot, 就会自动配置xxxAutoConfigation文件。
所以,在springboot 自动配置包中进行查看即可。

在这里插入图片描述
在这里插入图片描述
SprigMvc的配置类: 大多在WebMvcAutoConfiguration 这个类中。

查看这个配置类是否生效:
在这里插入图片描述
生效

找到这个内部类:
在这里插入图片描述

在这里插入图片描述
点进入查看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明了,所有的参数都是从容器中进行拿取。

资源处理的默认规则:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值