@SpringBootApplication注解揭秘

在这里插入图片描述
点进去@SpringBootApplication,有以下几个注解
在这里插入图片描述
点击@EnableAutoConfiguration
在这里插入图片描述
最重要的是@Import导入的这个类
我们找到这个类的源码AutoConfigurationImportSelector.java
点进去看有这个方法
在这里插入图片描述
再点进去loadFactoryNames这个方法
在这里插入图片描述
再跟一下loadSpringFactories这个方法
在这里插入图片描述
由此发现urls是获取了所有的路径,什么路径呢,就是FACTORIES_RESOURCE_LOCATION的值的路径
在这里插入图片描述
在这里插入图片描述
下面这个方法加载了每个遍历的spring.factories的键值对

Properties properties = PropertiesLoaderUtils.loadProperties(resource);

然后将spring.factories的键与对应的所有值放入到result

for (Map.Entry<?, ?> entry : properties.entrySet()) {
	String factoryClassName = ((String) entry.getKey()).trim();
	for (String factoryName : StringUtils.commaDelimitedListToStringArray((String) entry.getValue())) {
		result.add(factoryClassName, factoryName.trim());
	}

我在跟代码的时候发现result的size有问题,比如第一个spring.factories与第二个spring.factories的键加起来的数量与size的数量不一致,以为有条件过滤掉部分的键,其实不是,因为每个spring.factories中有相同的键,只是将值追加到键中了。
比如
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191014165607193.png
在这里插入图片描述
在这里插入图片描述
她两都有相同的键org.springframework.context.ApplicationContextInitializer。

后记
我在看一个博主分析源码的文章,与我有一处不同,就是@Import导入的类不同,
他那篇文导入的类是EnableAutoConfigurationImportSelector.class,而我的源码导入的是AutoConfigurationImportSelector.class
我又找了找那个类,发现并没有找到,我又找哪个类继承了AutoConfigurationImportSelector.class,发现
在这里插入图片描述
而他之中的在这里插入图片描述
这个方法也与之前不同。所以说springboot版本问题,我的springboot是2.1.4,而那篇文章分析的源码应该是之前的版本。

附上那位博主的文章地址:https://www.cnblogs.com/wyq1995/p/9942147.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值